امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
join دو تیبل
نویسنده پیام
ha_60 آفلاین
بنيانگذار سايت
******

ارسال‌ها: 4,637
موضوع‌ها: 216
تاریخ عضویت: آبان ۱۳۸۳

تشکرها : 560
( 6556 تشکر در 2385 ارسال )
ارسال: #1
join دو تیبل
سلام
من 2 تا تیبل دارم فرض کنید به این فرمت
Main_Table
ID
DayID
text
و
Day_Table
ID
DAY
PRICE
می خوام از تیبل اول text ها یی رو پیدا کنم که معادل اونها DAY برابر 12 باشه مثلا و PRICE بزرگتر از یک و یا اصلا رکوردی با DAY=12 وجود نداشته باشه رو بر گردونه
Main_Table
  1. 1,1,test
  2. 2,2,test2
Day_Table
  1. 1,12,2
در واقع باید test و test2 انتخاب بشه امید وارم درست توضیح داده باشم
اینم یه sql که اشتباه چون دومی رو بر نمی گردونه
کد:
SELECT m.text FROM `Main_Table` as m join Day_Table as d on m.DayID=d.ID WHERE (d.`DAY`=12 AND d.PRICE > 1) or ????

هادی امین زاده
دیدن چیزی که همه می بینند هنر نیست
بانک اطلاعات صنایع ایران.
۲۹-فروردین-۱۳۸۷, ۱۰:۳۱:۴۹
وب سایت ارسال‌ها
پاسخ
Mamad2003 آفلاین
کاربر با تجربه
****

ارسال‌ها: 1,150
موضوع‌ها: 18
تاریخ عضویت: آذر ۱۳۸۲

تشکرها : 9
( 388 تشکر در 232 ارسال )
ارسال: #2
RE: join دو تیبل
سلام
رابطه بین این دو جدول در واقع فیلد ID هست و شرط join شدن دو جدول بر این اساس هست که m.DayID=d.ID .
شما در جدول دوم یا همون Day_Table یک رکورد دارید و اونهم دارای ID برابر با 2 هست . در جدول اول هم یک رکورد با شرط فوق وجود داره پس در نتیجه query که شما نوشتی باید یک جواب برگردونه !

گويند بهشت و حور و کوثر باشد  ..  جوي می و شير و شهد و شکر باشد
پر کن قدح باده و بر دستم نه      ..   نقدي ز هزار نسيه خوشتر باشد  
۲۹-فروردین-۱۳۸۷, ۱۱:۴۱:۳۸
ارسال‌ها
پاسخ
Mamad2003 آفلاین
کاربر با تجربه
****

ارسال‌ها: 1,150
موضوع‌ها: 18
تاریخ عضویت: آذر ۱۳۸۲

تشکرها : 9
( 388 تشکر در 232 ارسال )
ارسال: #3
RE: join دو تیبل
در واقع شما یک inner join انجام دادی و در نتیجه باید همون جواب رو هم میگرفتی اما به نظر میاد اگر به جای یک join معمولی از left join استفاده کنی نتیجه دلخواهت رو میگیری :

کد:
SELECT m.text FROM `Main_Table` as m left join Day_Table as d on m.DayID=d.ID WHERE (d.`DAY`=12 AND d.PRICE > 1) or ????

گويند بهشت و حور و کوثر باشد  ..  جوي می و شير و شهد و شکر باشد
پر کن قدح باده و بر دستم نه      ..   نقدي ز هزار نسيه خوشتر باشد  
(آخرین ویرایش در این ارسال: ۳۰-فروردین-۱۳۸۷, ۰۱:۵۷:۴۹، توسط Mamad2003.)
۳۰-فروردین-۱۳۸۷, ۰۱:۵۷:۲۳
ارسال‌ها
پاسخ
ha_60 آفلاین
بنيانگذار سايت
******

ارسال‌ها: 4,637
موضوع‌ها: 216
تاریخ عضویت: آبان ۱۳۸۳

تشکرها : 560
( 6556 تشکر در 2385 ارسال )
ارسال: #4
RE: join دو تیبل
سلام
و ممنون
سیستم پیچیده تر از این حرف هاست :d
این نباید یک جواب برگردونه من دومی رو هم می خوام
من می خوام اگه d.`DAY`=12 وجود نداشت شرط قیمت رو چک نکنه یعنی text2 هم جواب هست چون اصلا رکوردی معادل تو جدول نداره مشکل من اینجاست که این day هر روز عوض می شه و مثلا ممکنه ظهر یه قیمت بهش بدم و تا ندادم پس صفر باید درنظر گرفته بشه مثلا من کسایی رو می خوام که امروز کمتر از 1000 تومان خرید کردن اگه خرید کرده باشن که حل ولی اگه خرید نکرده باشن این کویری هیچی بر نمی کردونه البته ممکنه این افراد دیروز 2000 تومان هم خرید کرده باشن که مهم نیست ولی امروز هیچ خریدی نکردن
یه راه اینه که اولین ثانیه امروز برای همه یه خرید صفر ثبت کنم ولی کار عاقلانه ای نیست
فکر کنم ممد جان فقط کار خودته حلش کنی

هادی امین زاده
دیدن چیزی که همه می بینند هنر نیست
بانک اطلاعات صنایع ایران.
(آخرین ویرایش در این ارسال: ۳۰-فروردین-۱۳۸۷, ۱۱:۴۲:۱۴، توسط ha_60.)
۳۰-فروردین-۱۳۸۷, ۱۱:۲۸:۳۲
وب سایت ارسال‌ها
پاسخ
ha_60 آفلاین
بنيانگذار سايت
******

ارسال‌ها: 4,637
موضوع‌ها: 216
تاریخ عضویت: آبان ۱۳۸۳

تشکرها : 560
( 6556 تشکر در 2385 ارسال )
ارسال: #5
RE: join دو تیبل
پس چی شد کسی بلد نبود؟ :(

هادی امین زاده
دیدن چیزی که همه می بینند هنر نیست
بانک اطلاعات صنایع ایران.
۰۱-اردیبهشت-۱۳۸۷, ۰۹:۰۷:۲۸
وب سایت ارسال‌ها
پاسخ
Mamad2003 آفلاین
کاربر با تجربه
****

ارسال‌ها: 1,150
موضوع‌ها: 18
تاریخ عضویت: آذر ۱۳۸۲

تشکرها : 9
( 388 تشکر در 232 ارسال )
ارسال: #6
RE: join دو تیبل
هادی جان یک روزی نبودم . سعی میکنم براش یه راه پیدا کنم Question

گويند بهشت و حور و کوثر باشد  ..  جوي می و شير و شهد و شکر باشد
پر کن قدح باده و بر دستم نه      ..   نقدي ز هزار نسيه خوشتر باشد  
۰۱-اردیبهشت-۱۳۸۷, ۱۹:۰۶:۲۹
ارسال‌ها
پاسخ
Mamad2003 آفلاین
کاربر با تجربه
****

ارسال‌ها: 1,150
موضوع‌ها: 18
تاریخ عضویت: آذر ۱۳۸۲

تشکرها : 9
( 388 تشکر در 232 ارسال )
ارسال: #7
RE: join دو تیبل
من query زیر رو تست کردم و جواب داد :

کد:
SELECT text FROM Main_Table WHERE DayID NOT IN ( SELECT ID FROM Day_Table WHERE DAY=12 and PRICE<=1);

گويند بهشت و حور و کوثر باشد  ..  جوي می و شير و شهد و شکر باشد
پر کن قدح باده و بر دستم نه      ..   نقدي ز هزار نسيه خوشتر باشد  
۰۱-اردیبهشت-۱۳۸۷, ۲۱:۲۹:۳۰
ارسال‌ها
پاسخ
ha_60 آفلاین
بنيانگذار سايت
******

ارسال‌ها: 4,637
موضوع‌ها: 216
تاریخ عضویت: آبان ۱۳۸۳

تشکرها : 560
( 6556 تشکر در 2385 ارسال )
ارسال: #8
RE: join دو تیبل
سلام دستت درد نکنه
مشکل حل می شه با این ولی یه سوال دیگه
مثلا توی یه جدول 10000 تایی روزی حداقل 100000 بار اجرا یکم فشار ایجاد نمی کنه؟ (البته با فرض ایندکس گذاری)
اگه اینو به همون روش join می شد نوشت فشار کمتری ایجاد می کرد تا این روش 2 select ؟
البته توی فکرم جواب هارو کش کنم و از توی کش دوباره سلکت بزنم تا شرط ها کمتر بشن (تعدادشون بیشتر از چیزیه که الان می بینی)
کلا روش دیگه ای به جز کش برای این پیش نهاد می کنی؟

هادی امین زاده
دیدن چیزی که همه می بینند هنر نیست
بانک اطلاعات صنایع ایران.
۰۲-اردیبهشت-۱۳۸۷, ۰۹:۰۶:۵۷
وب سایت ارسال‌ها
پاسخ
Mamad2003 آفلاین
کاربر با تجربه
****

ارسال‌ها: 1,150
موضوع‌ها: 18
تاریخ عضویت: آذر ۱۳۸۲

تشکرها : 9
( 388 تشکر در 232 ارسال )
ارسال: #9
RE: join دو تیبل
تا اونجا که بررسی کردم شاید کلا نشه این query رو با join نوشت چون پیدا کردن یه رابطه منطقی با کمک فیلد ID بین دو جدول امکان پذیر نبود .
من میتونم بهت اینو پیشنهاد کنم که اگر میتونی select دوم رو به شکل یک view تعریف کنی . این باعث میشه که دیتابیس نخواد هر دفعه اونو Re-Parse کنه و سرعت بالا تر میره .
کد:
mysql> CREATE VIEW v AS SELECT ID FROM Day_Table WHERE DAY=12 and PRICE<=1;

حالا میشه اینطوری query رو دوباره نوشت :

کد:
SELECT text FROM Main_Table WHERE DayID NOT IN v;

روش Cache کردن هم بد نیست ولی خوب در کل فکر نکنم بیشتر از این query رو بشه کارا کرد .

گويند بهشت و حور و کوثر باشد  ..  جوي می و شير و شهد و شکر باشد
پر کن قدح باده و بر دستم نه      ..   نقدي ز هزار نسيه خوشتر باشد  
۰۲-اردیبهشت-۱۳۸۷, ۱۳:۱۸:۱۵
ارسال‌ها
پاسخ
ha_60 آفلاین
بنيانگذار سايت
******

ارسال‌ها: 4,637
موضوع‌ها: 216
تاریخ عضویت: آبان ۱۳۸۳

تشکرها : 560
( 6556 تشکر در 2385 ارسال )
ارسال: #10
RE: join دو تیبل
ممنون لطف کردی فکر نمی کردم اصلا قابل حل باشه Biggrin

هادی امین زاده
دیدن چیزی که همه می بینند هنر نیست
بانک اطلاعات صنایع ایران.
۰۳-اردیبهشت-۱۳۸۷, ۱۰:۱۷:۰۰
وب سایت ارسال‌ها
پاسخ
Mamad2003 آفلاین
کاربر با تجربه
****

ارسال‌ها: 1,150
موضوع‌ها: 18
تاریخ عضویت: آذر ۱۳۸۲

تشکرها : 9
( 388 تشکر در 232 ارسال )
ارسال: #11
RE: join دو تیبل
قربانت Rolleyes

گويند بهشت و حور و کوثر باشد  ..  جوي می و شير و شهد و شکر باشد
پر کن قدح باده و بر دستم نه      ..   نقدي ز هزار نسيه خوشتر باشد  
۰۳-اردیبهشت-۱۳۸۷, ۱۴:۴۰:۳۰
ارسال‌ها
پاسخ


پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 1 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS