PDA

View Full Version : سوال: جستجو بر اساس دوفیلد در دو جدول



m.batimar
یک شنبه 16 تیر 1392, 12:03 عصر
سلام دوستان من تو پروژم میخوام عمل جستجو رو انجام بدم و در داخل گرید ویو نشون بده به این صورت که:
من تعدادی فیلد تو جدول کالا و تعدادی فیلد تو جدول ویژگی ها دارم که میخوام جستجوم برا اساس دوتا فیلد باشه
یعنی فیلید برچسب از جدول کالا و نام مال از جدول ویژگی ها
یعنی کاربر هر کدوم از این دو فیلد رو که خواست وارد کنه و بر اساس همون جستجو انجام بشه و همه فیلد ها ی دوتا جدول تو گرید نمایش داده شود....لطفا با کد راهنماییم کنین خیلی احتیاج دارم...ممنونم از لطفتون

amir200h
یک شنبه 16 تیر 1392, 12:13 عصر
باید یه دیاگرام بزنی براشون و کلید اصلی ی طرفو ببری تو ی طرف دیگه

select kala.barchasb,info.name from kala,info where id.kala=idinfo and barchast.kala='barchasbi ke mikhai' and info.name='infoei ke mikha

m.batimar
یک شنبه 16 تیر 1392, 12:16 عصر
تو هر دو تا این جدول ها barchasb کلید اصلیه

"select tbl_vijegiha.name_mal,tbl_vijegiha.keshvare_sazand e,tbl_vijegiha.name_vahede_sazande,tbl_vijegiha.va zn_abad,tbl_vijegiha.rang,tbl_vijegiha.model,tbl_v ijegiha.serial,tbl_vijegiha.amper,tbl_vijegiha.sho mare_form ,tbl_kala.shomare,tbl_kala.tarikh,tbl_kala.baha_kh arid,tbl_kala.baha_karshenasi,tbl_kala.saere_mosha khasat,tbl_kala.name_estefadekonande,tbl_kala.barc hasb from tbl_kala inner join tbl_vijegiha on tbl_vijegiha.barchasb= tbl_kala.barchasb

veniz2008
یک شنبه 16 تیر 1392, 12:23 عصر
سلام.
شما باید یک فیلد مشترک بین دو جدول داشته باشید مثلا کد کالا.
حالا از inner join میتونید کمک بگیرید. منظور از usrinput@ همون متنی هست که کاربر وارد میکنه.

select * from TblKala inner join TblVijegi on TblKala.KalaID = TblVijegi.KalaID
where TblKala.Barchasb = @userinput OR TblVigegi.MalName = @userinput
اگر چک باکس گذاشتید، علاوه بر کد بالا میتونید ابتدا با یک if چک کنید که مثلا اگر کاربر بر حسب برچسب از جدول کالا میخواد جستجو کنه کوئری رو ساده تر کنید (اینطوری کد بهینه تر هست و بهتره کوئری خودتون رو به اینصورت بنویسید) :

select * from TblKala inner join TblVijegi on TblKala.KalaID = TblVijegi.KalaID where TblKala.Barchasb = @userinput
موفق باشید.

m.batimar
یک شنبه 16 تیر 1392, 20:33 عصر
ممنون دوستان عزیز ولی این ارورو میده هرچی بهش توجه میکنم نمیدونم کجای کوئریم ایراد داره


string s3 = "select tbl_vijegiha.name_mal,tbl_vijegiha.keshvare_sazand e,tbl_vijegiha.name_vahede_sazande,tbl_vijegiha.va zn_abad,tbl_vijegiha.rang,tbl_vijegiha.model,tbl_v ijegiha.serial,tbl_vijegiha.amper,tbl_vijegiha.sho mare_form ,tbl_kala.shomare,tbl_kala.tarikh,tbl_kala.baha_kh arid,tbl_kala.baha_karshenasi,tbl_kala.saere_mosha khasat,tbl_kala.name_estefadekonande,tbl_kala.barc hasb from tbl_kala inner join tbl_vijegiha on tbl_vijegiha.barchasb= tbl_kala.barchasb where tbl_vijegiha.name_mal='" + txtnamemal.Text + "' OR tbl_kala.barchasb="+txtshomarebarchasb.Text+" ";
DataTable dt = k.select(s3, "tbl_kala").Tables[0];
dataGridViewX1.DataSource = dt;
البته موقع وارد کردن برچسب مشکلی نداره و جواب میده ولی موقع نام مال این ارورو میده
Incorrect syntax near '='.

m.batimar
یک شنبه 16 تیر 1392, 21:31 عصر
خواهش میکنم کمکم کنین خیلی احتیاج دارم....چرا وقتی نام کالا رو فقط وارد میکنم ارور میده؟

veniz2008
یک شنبه 16 تیر 1392, 21:42 عصر
مشکل بخاطر اینه که زمانیکه متن یک تکست باکس رو مینویسید، یعنی دارید با رشته ها کار میکنید، همیشه رشته ها در sql باید بین تک کوتیشن قرار بگیرن :

string s3 = "select * from tbl_kala inner join tbl_vijegiha on tbl_vijegiha.barchasb= tbl_kala.barchasb where tbl_vijegiha.name_mal='" + txtnamemal.Text + "' OR tbl_kala.barchasb='"+txtshomarebarchasb.Text+"'";
این شیوه کد نویسی سال هاست که منسوخ شده (اول بخاطر مسائل امنیتی، چراکه براحتی میشه چنین select هایی رو هک کرد. و دوم بخاطر همین دردسر ست کردن تک کوتیشن و دابل کوتیشن ها).
حتما از پارامترها استفاده کنید. بارها در سایت دربارش بحث شده و امن تر و ساده تر از کوئری بالا نوشته میشه.
موفق باشید.