PDA

View Full Version : سوال: پیدا کردن یک فیلد یا ستون در بین چند جدول



forodo
چهارشنبه 03 مهر 1392, 19:16 عصر
سلام
من یک ستون به نام PeigiriCode در 25 جدول در بانک اطلاعاتیم دارم.
می خوام ببینم چطور می شه یک سلکت بزنم و این ستون در تمامی جداول بررسی بشه؟
با تشکر

forodo
چهارشنبه 03 مهر 1392, 19:25 عصر
باید دستور سلکت رو اینجوری بنویسم:

@"SELECT FormName
FROM tblServisRequest, tblOfficeDuty, tblMosaede2, ...
WHERE PeigiriCode = '" + txtCode.Text + "'";


که همه 25 جدولم باشه؟
یا روش بهتری هم هست؟
یا اصلاً روش نوشتن این سلکت درسته یا نه؟

Kubuntu
چهارشنبه 03 مهر 1392, 23:05 عصر
اولا ک چرا سوالت رو تو بخش sql نمی زنی؟!؟!
ثانیا جوابت اینه که:
حتما txtCode.Text توی یک جدول وجود دارد به این معنی که یک جدول وجود داره که PeigiriCode کلید اصلی آن است و در بقیه جداول این ستون بعنوان کلید فرعی هست. من اسم این جدول اصلی رو می ذارم tblmain

select tblX.formName
from (select PeigiriCode from tblmain where PeigiriCode ='" + txtCode.Text + "') as m
join tbl1 ON m.PeigiriCode= tbl1.PeigiriCode
join tbl2 ON tbl1.PeigiriCode= tbl2.PeigiriCode
و تا آخر ادامه می دی

forodo
چهارشنبه 03 مهر 1392, 23:51 عصر
PeigiriCode کلید اصلی یا فرعی نیست. یک فیلد عادی است.
لطفاً در مورد کد بیشتر توضیح دهید.
درضمن عذرخواهی می کنم که تاپیک رو اینجا ایجاد کردم.

Kubuntu
پنج شنبه 04 مهر 1392, 00:00 صبح
خب در این کد مهم نیس فیلد شما اصلی یا فرعی باشه.
یه سوال دارم. شما میخوای txtCode.Text رو در همه جدولها سرچ کنی و ببینی تو کدوم جدول هست یا نه؟!
من فکر می کنم شما جداول رو درست طراحی نکردید. میشه چندتا از جدولها با فیلدها رو بهم بگی تا بتونم بهتر کمکت کنم

forodo
پنج شنبه 04 مهر 1392, 00:01 صبح
و تا آخر ادامه می دی

یعنی باید کل 25 جدول رو بنویسم.
واااااااااااااااااااااااا ااااااااااااااااااااااااا ااااااااااااا ویلاااااااااااااااااااااا ااااااااااااااااااااااااا ااااااااااا
اینجوری که به خاک سیاه می شینم.

forodo
پنج شنبه 04 مهر 1392, 00:12 صبح
خب در این کد مهم نیس فیلد شما اصلی یا فرعی باشه.
یه سوال دارم. شما میخوای txtCode.Text رو در همه جدولها سرچ کنی و ببینی تو کدوم جدول هست یا نه؟!
من فکر می کنم شما جداول رو درست طراحی نکردید. میشه چندتا از جدولها با فیلدها رو بهم بگی تا بتونم بهتر کمکت کنم

111200
در تمام جداولم دقیقاً این ستون با همین نام وجود دارد که از نوع text می باشد.
سلکت من بدین شکل:
مثلاً: ستون FormName و ID ( که aAuto Number هستش ) رو از تمامی جداول بیار به شرطی که PeigiriCode = 35/1.
این سلکت فقط از یک جدول اطلاعات رو ( حالا ممکن 3 یا 4 یا ... تعداد بیاره ) پیدا می کنه. ( به دلیل اینکه PeigiriCode جوری ذخیره می شود که توی دو جدول امکان ندارد 35/1 وجود داشته باشد ) ( در یک جدول چندتا هست ولی در جدول دیگری نیست )
بعد میگم از اون هایی که پیدا کردی FormName اونی رو بیار که ID اون از همه کوچکتر هستش.
در مجموع در آخر به من یک رشته برمی گرداند.

خوب توضیح دادم یا نه؟

Kubuntu
پنج شنبه 04 مهر 1392, 00:33 صبح
عالی بود!!!
درست حدس زدم جدول ها درست طراحی نشده چون مقدار تکراری در یک ستون وجود دارد.
شما بایدFormName و ID و ستونهایی که داده تکراری دارد را جدا کرده و در یک جدول جدید قرار بدی بعد یک کلید خارجی به جدولهای دیگه بزنی. اینطوری فقط یک FormName داری و نیاز نیس کوچکترین رو انتخاب کنی.

اگه راجع به اطلاعاتت و رابطه هاشون بیشتر بگی جدولهات رو هم طراحی می کنم واست

forodo
پنج شنبه 04 مهر 1392, 00:51 صبح
یعنی یه همچین چیزی باید بنویسم:

@"SELECT ID, FormName
INTO tblNewTable ( وجود ندارد، با این دستور ساخته می شود )
FROM تمامی جدوال
WHERE PeigiriCode = '" + 35\1 ( مثلاً ) + "'";



@"SELECT FormName
FROM tblNewTable
WHERE ID از همه کوچکتر باشد;

Kubuntu
پنج شنبه 04 مهر 1392, 00:55 صبح
دوست عزیز شما نباید جداول رو طوری طراحی کنی ک واسه پیدا کردن یک داده مجبور بشی همه جدولها رو بگردی. جداول شما نیاز به نرمالسازی داره... حالا خود دانی

forodo
پنج شنبه 04 مهر 1392, 01:02 صبح
دوست عزیز شما نباید جداول رو طوری طراحی کنی ک واسه پیدا کردن یک داده مجبور بشی همه جدولها رو بگردی. جداول شما نیاز به نرمالسازی داره... حالا خود دانی
آخه موضوع اینه که من 25 تا فرم خام دارم و به واسطه آنها 25 جدول در بانک اطلاعاتی.
هرکس که وارد آن درخواست ( فرم خام ) میشه یک کد پیگیری بهش داده می شه.
حالا هر موقع که بخواد اون کد پیگیری رو در کنترل تکست باکس وارد می کنه و فرم خام مربوطه پیدا میشه.

Kubuntu
پنج شنبه 04 مهر 1392, 10:34 صبح
یعنی 25تا کدپیگیری داریم که هرکد مختص یک فرم خاصه و به هر کاربر بصورت تصادفی یکی از این 25تا کد اختصاص داده می شه؟
اگه همین باشه کافیه شما یه جدول بنام Head_Info داشته باشی که شامل فیلدهای :
ID : کلید اصلی آتونامبر
FormName : از نوع varchar(15)
PeigiriCode: این ستون مقدار تکراری ندارد و هر رکورد مختص یک فرم است
در کل این جدول شما فقط 25 ردیف داره.
با این حساب دیگه نیاز نیس واسه بدست آوردن اسم فرم همه جدولها رو بگردی و کوئری شما می شه:
@"SELECT FormName
FROM Head_Info
WHERE PeigiriCode = '" + txtCode.Text + "'";
حالا اگر توی جدولهای دیگه وجه اشتراک وجود داره و ستون هایی هستند که مقدار تکراری یا NULL می گیرند باید بقیه جدولها هم بهینه بشه

forodo
پنج شنبه 04 مهر 1392, 13:00 عصر
داداش گلم درست شد.
شما گفتی یه جدول درست کن منم یکی درست کردم و دقیقاً همون فیلدهایی که گفتید رو درست کردم.
وقتی که داره کد پیگیری رو داخل جدولی که به فرم خودش مربوط هست می ریزه بهش گفتم توی جدول جدیدی هم که درست کردم بریز.
از صبر و حوصله ای که به خرج دادید ممنونم.

Kubuntu
پنج شنبه 04 مهر 1392, 16:26 عصر
خاهش می کنم آبجی!! :چشمک:
اگه در جدول خودش یک ستون بنام PeigiriCode داری که همه سطرها مقداری یکسان می گیره، اون ستون رو حذف کن