merlin007
پنج شنبه 10 دی 1394, 18:54 عصر
138079
سلام
طبق تصویر بالا و جداول مشخص شده یک کوئری میخوام که خروجی مشخص شده رو بهم بده:
سه جدول داریم ( البته تعداد بیشتر هست برای سادگی سه مورد آورده شده)
product محصولات
sub product زیر محصولات
stock انبار
میخوام اینا طوری جوین بشن که : لیست تمام محصولاتی که دارای کمترین قیمت هستند با این شرط که دارای تعداد (count) بیشتر از 0 و تاریخ درج جدیدتر باشند
توضیحش یه خورده سخته در تصویر هم مشخص شده که دقیقا چه چیزایی باید در خروجی بیاد
mohsen212
دوشنبه 06 اردیبهشت 1395, 19:05 عصر
دوست عزیز میتونی از تابعMinاستفاده کنی که کم ترین مقدار رو بر میگردونه ولی واس تاریخ اطلاع ندارم
mohsen212
دوشنبه 06 اردیبهشت 1395, 19:08 عصر
برای تاریخ هم میتونی از order by استفاده کنی
mohsen212
دوشنبه 06 اردیبهشت 1395, 19:11 عصر
البته برای تاریخ یادت باشه که باید از limitهم استفاده کنی
select datafile
orderby date
limit1
Mahmood_M
سه شنبه 07 اردیبهشت 1395, 04:03 صبح
لیست تمام محصولاتی که دارای کمترین قیمت هستند با این شرط که دارای تعداد (count) بیشتر از 0 و تاریخ درج جدیدتر باشند
این تعریف با جدول نتیجه ای که قرار دارید تفاوت داره، کمترین تاریخ یا جدیدترین محصول ملاکه ؟ یا تاریخ های بزرگتر از یک مقدار خاص
باید یک محدودیت برای تاریخ درنظر بگیرید، جدیدتر بر اساس چه تاریخی
اگر محدودیتی وجود نداره می تونید Sort کنید و اولین رکورد رو نمایش بدید :
SELECT P.PID, P.Title, S.SPID, S.Name, A.Count, A.Price, A.Discount, A.Inserted_Date
FROM product_table P LEFT JOIN sub_product_table S ON P.PID = S.PID
LEFT JOIN stock_table A ON A.SPID = S.SPID
WHERE A.Count > 0
ORDER BY A.Inserted_Date DESC LIMIT 1;
یا به صورت زیر فقط رکورد با بالاترین تاریخ در انبار رو انتخاب کنید که نسبت به روش بالا سرعت بهتری داره ( برای فیلد تاریخ Index بذارید ) :
SELECT P.PID, P.Title, S.SPID, S.Name, A.Count, A.Price, A.Discount, A.MaxDate
FROM product_table P LEFT JOIN sub_product_table S ON P.PID = S.PID
LEFT JOIN (SELECT SPID, Count, Price, Discount, Max(Inserted_Date) as MaxDate FROM stock_table) A
ON A.SPID = S.SPID
WHERE A.Count > 0
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.