PDA

View Full Version : سوال: می خوام جدول اول رو بازیابی کنم و در صورت موجود بودن، اطلاعات جدول دوم هم بازیابی بشه



idocsidocs
دوشنبه 01 مهر 1392, 00:32 صبح
توی دیتابیس دوتا جدول دارم که اطلاعات جدول اول حتما وجود دارن و اطلاعات جدول دوم ممکنه وجود داشته باشن یا وجود نداشته باشن

از کوئری LEFT JOIN استفاده کردم ولی این کوئری در صورتیکه مقادیر هر دو جدول وجود داشته باشن اجرا می شه و اگر یکی از دو جدول موجود باشن هیچ رکوردی رو بر نمی گردونه.

راه حل چیه؟

AliRezaPro
دوشنبه 01 مهر 1392, 01:05 صبح
ببینید :

http://stackoverflow.com/questions/14182609/mysql-join-only-if-a-row-exists-from-the-left-table

idocsidocs
دوشنبه 01 مهر 1392, 20:15 عصر
می تونید توضیح بدید؟

Veteran
دوشنبه 01 مهر 1392, 20:24 عصر
توی دیتابیس دوتا جدول دارم که اطلاعات جدول اول حتما وجود دارن و اطلاعات جدول دوم ممکنه وجود داشته باشن یا وجود نداشته باشن


یعنی چی ؟ بیشتر توضیح بدین.
و اگر ممکنه دیتابیس قرار بدید + یک مثال

idocsidocs
سه شنبه 02 مهر 1392, 16:57 عصر
یعنی چی ؟ بیشتر توضیح بدین.
فرض کنید یه جدول برای محصولات و یه جدول برای سفارشات داریم.
اگر محصولی حذف بشه اطلاعات سفارشات اونن محصول حذف نمی شه.

حالا می خوام موقع نمایش لیست کامل سفارشات اسم محصول رو هم نمایش بدم و اگر محصول حذف شده بود بجای اسمش عبارت "حذف شده" رو قرار بدم.

idocsidocs
سه شنبه 02 مهر 1392, 20:12 عصر
این کوئری یک ساعتی می شه منو درگیر خودش کرده!

حالت کلی کوئری به این صورته:

SELECT o.id1, p.title
FROM ordder o
LEFT JOIN product p
ON o.id1=p.id
WHERE (1=1 )
ORDER BY o.id1 DESC LIMIT 0 , 30
این کوئری بخاطر وجود LIMIT 0 , 30 اجرا نمی شه اما وقتی LIMIT 0 , 30 حذف می کنم کوئری بدون مشکل اجرا می شه

SELECT o.id1, p.title
FROM ordder o
LEFT JOIN product p
ON o.id1=p.id
WHERE (1=1 ) ORDER BY o.id1
مشکل چی می تونه باشه؟

idocsidocs
سه شنبه 02 مهر 1392, 20:39 عصر
این خطا رو نشون می ده:

#1064 - You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version for the right syntax to use near '30' at line 1
ولی اگر DESC LIMIT 0 , 30 حذف بشه دیگه خطا نمایش داده نمی شه و کوئری اجرا می شه!

MostafaEs3
سه شنبه 02 مهر 1392, 21:14 عصر
//////////

Veteran
سه شنبه 02 مهر 1392, 21:22 عصر
جدولو میشه بزارید ؟

idocsidocs
سه شنبه 02 مهر 1392, 23:18 عصر
جدولو میشه بزارید ؟جدولها فیلدهای زیادی دارن ولی فقط همون قسمتی که مشخص کردم باعث ایجاد مشکل شده و اگر حذف بشه اروری نمایش داده نمی شه.

در اینجا b دقیقا برای کدوم جدول هست؟!همون p درسته و کوئری رو اصلاح کردم.


SELECT o.id1, p.title
FROM ordder o
LEFT JOIN product p
ON o.id1=p.id
WHERE (1=1 )
ORDER BY o.id1 DESC LIMIT 0 , 30

مطمئن نیستم اما این کوئری هم تست کنید:مشکل با حذف شدن LIMIT 0, 30 درست می شه و توی اروری که
ذاشتم هم همین موضوع مشخص شده.