PDA

View Full Version : سوال: چرا LIMIT 0 , 30 باعث اخلال در کار LEFT JOIN می شه؟



idocsidocs
سه شنبه 02 مهر 1392, 17: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
مشکل چی می تونه باشه؟

MMSHFE
چهارشنبه 03 مهر 1392, 07:44 صبح
اینو امتحان کنید:

SELECT * FROM (SELECT `o`.`id1`, `p`.`title`
FROM `order` AS `o`
LEFT JOIN `product` AS `p`
ON `o`.`id1`=`p`.`id`) AS `temp`
ORDER BY `id1` DESC LIMIT 0 , 30

ضمناً همیشه عادت کنید Query رو با رعایت کامل استانداردها بنویسید. مثلاً حذف کلمه AS ممکنه در بعضی سرورها و نسخه های MySQL مشکلی ایجاد نکنه و بعضی جاها مشکل بوجود بیاره. پس عادت کنید همیشه حالتی که همه جا اجرا میشه رو استفاده کنید.

idocsidocs
چهارشنبه 03 مهر 1392, 08:22 صبح
مهندس این کوئری یه LEFT JOIN ساده هست و اگه ORDER BY o.id1 DESC LIMIT 0 , 30 حذف بشه بدون مشکل اجرا می شه

این ارور نمایش داده می شه:

#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
دلیل این مشکل مشخص نیست؟

MMSHFE
چهارشنبه 03 مهر 1392, 09:09 صبح
یک Export از جدولهای order و product میگذارین تا تست کنم؟

FastCode
چهارشنبه 03 مهر 1392, 09:14 صبح
دستورتون رو با چه برنامه ای میفرستید؟
در یک session ه دیگه یا با یک برنامه دیگه تست کنید.فکر میکنم ادیتوری که دستور رو توش مینویسید ممکنه مشکل داشته باشه یا چند تا کارکتر نامرئی توش باشه.

Reza1607
چهارشنبه 03 مهر 1392, 09:34 صبح
این کوئری یک ساعتی می شه منو درگیر خودش کرده!

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

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
مشکل چی می تونه باشه؟


با سلام
به نظرم بعد از عدد 30 یک کاراکتر ناخواسته به کوئریت اضافه شده اون رو پاک کن شاید اصلاح بشه
دلیل حرفم هم این هست که تو متن خطایی که گذاشتی بعد از 30 یک همچین  چیزی وجود داره

البته این رو هم بگم که تو تستی که من کردم کوئری شما خطا داد ولی LIMIT رو پاک کردم و مجددا نوشتم درست شد


مهندس این کوئری یه LEFT JOIN ساده هست و اگه ORDER BY o.id1 DESC LIMIT 0 , 30 حذف بشه بدون مشکل اجرا می شه

این ارور نمایش داده می شه:

#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
دلیل این مشکل مشخص نیست؟

idocsidocs
چهارشنبه 03 مهر 1392, 11:27 صبح
البته این رو هم بگم که تو تستی که من کردم کوئری شما خطا داد ولی LIMIT رو پاک کردم و مجددا نوشتم درست شدبا توجه به اینکه تست کردید بنظرتون مشکل چیه؟

FastCode
چهارشنبه 03 مهر 1392, 11:59 صبح
مشکلتون دقیقا همون چیزیه که حدث میزدم.

33 30 EF BB BF 0A
این آخر دستوری هست که اجرا میکنید
0A یعنی اینتر
33 30 هم یعنی 30
سه بایت اضافست

Reza1607
چهارشنبه 03 مهر 1392, 13:24 عصر
با توجه به اینکه تست کردید بنظرتون مشکل چیه؟

همون طور که دوستمون FastCode گفتن آخر کوئریتون چند کاراکتر اضافه به صورت مخفی هست اون رو پاک کنید درست میشه

idocsidocs
چهارشنبه 03 مهر 1392, 15:59 عصر
این آخر دستوری هست که اجرا میکنید
0A یعنی اینتر
33 30 هم یعنی 30
سه بایت اضافست
این کاراکترها به چه دلیل به کوئری اضافه می شن؟

ابوذر محمودی
چهارشنبه 03 مهر 1392, 16:01 عصر
من کد اول شما و کد آقای شهرکی رو که گذاشته بودین با notepad++ چک کردم ، انتهای کدتون یک کاراکتر اضافه س، که کدش معادل EFBBBF هست و کد دومی که بدون limit گذاشتین این کاراکترو نداره و راحت اجرا میشه.
عکسشو میذارم ببینید ، اگه میشه از ; انتهای کوئری تا Limit رو پاک کنید ، دوباره تایپ کنین بعد تست کنین نتیجه رو بگین.
http://www.8pic.ir/images/45583371703733492522.jpg (http://www.8pic.ir/)

اما اینکه چرا این کاراکتر اضافه شده جای سواله .
ممکنه مثلاَ به خاطر یونیکد صفحه باشه؟؟
یا اینکه ممکنه مربوط به ادیتور باشه؟؟
یونیکدتون چیه و از چه ادیتوری استفاده میکنید؟

idocsidocs
چهارشنبه 03 مهر 1392, 18:26 عصر
عکسشو میذارم ببینید ، اگه میشه از ; انتهای کوئری تا Limit رو پاک کنید ، دوباره تایپ کنین بعد تست کنین نتیجه رو بگین.
ارور برطرف شد!

کپی پیست کردم و این مشکل برطرف شد اما مشکل اینجاست که این کدها رو قبلا استفاده می کردم و دلیل وجود این کاراکتر اضافه برام نامشخصه

FastCode
چهارشنبه 03 مهر 1392, 19:18 عصر
ارور برطرف شد!

کپی پیست کردم و این مشکل برطرف شد اما مشکل اینجاست که این کدها رو قبلا استفاده می کردم و دلیل وجود این کاراکتر اضافه برام نامشخصه
ممکنه قسمتی از BOM یا چیزی مشابهش باشه که توی کپی چند تا فایل یا هر کار دیگه ای جا به جا شده.