Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Ошибка синтаксиса SQL


ililliliMusic

Recommended Posts

Здравствуйте уважаемые форумчане. Решил обновить кэш и модификаторы на сайте, после чего в товарах начала вылетать 500я ошибка. Включил логи на хосте и лицезрел это:

Спойлер

Fatal error: Uncaught Exception: Error: 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 '(SELECT price FROM oc_product_discount pd2 WHERE pd2.product_id = p.product_id A' at line 1<br />Error No: 1064<br />SELECT DISTINCT *, pd.name AS name, p.image, m.skidka AS skidka, m.name AS manufacturer (SELECT price FROM oc_product_discount pd2 WHERE pd2.product_id = p.product_id AND pd2.customer_group_id = '1' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < NOW()) AND (pd2.date_end = '0000-00-00' OR pd2.date_end > NOW())) ORDER BY pd2.priority ASC, pd2.price ASC LIMIT 1) AS discount, (SELECT price FROM oc_product_special ps WHERE ps.product_id = p.product_id AND ps.customer_group_id = '1' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) AS special, (SELECT points FROM oc_product_reward pr WHERE pr.pro in /home/httpd/vhosts/svarov.ru/httpdocs/system/library/db/mysqli.php on line 40

Адекватно расшифровать это послание не могу. Шарился по всей базе, пытался методом тыка и переборочным удалением таблиц найти где проблема - так и не смог. Может кто-либо навести на путь истинный? Куда копать? Может в товарах какое то значение неверно?

Надіслати
Поділитися на інших сайтах


24 minutes ago, ililliliMusic said:

SELECT DISTINCT *, pd.name AS name, p.image, m.skidka AS skidka, m.name AS manufacturer

очевидно у Вас стоит какой-либо модификатор или даже модуль+модификатор, который как-то дополняет\модифицирует получаемую информацию о товарах в категориях\карточке. И делает это криво. Во всяком случае запрос похож на коробочный, но с некоторыми правками.

28 minutes ago, ililliliMusic said:

Решил обновить кэш и модификаторы на сайте,

ищите нужный (косячный) модификатор либо в списке модификаторов в админке ОС, либо смотрите xml-ки в папке /system/

Поискать так же можно по содержимому модификатора - например, по слову 'skidka'

Надіслати
Поділитися на інших сайтах

32 минуты назад, ililliliMusic сказал:

SELECT price FROM oc_product_discount pd2

Но не указаны другие псевдонимы - откуда берем p? Его нужно указать в самом начале запроса

SELECT *.pd2 , *.p FROM oc_product_discount AS pd2 JOIN таблица AS p WHERE pd2.product_id = p.product_id

Надіслати
Поділитися на інших сайтах

15 минут назад, esculapra сказал:

*.pd2 , *.p

Тут перепутал - псевдоним указывается перед полем, то есть pd2.*

Вот пример составного запроса - у меня это организовано в классах, но понять не сложно

Цитата

       $query->select('p.*,g.genre_id,g.title as gtitle,g.alias as galias,c.parent,c.title as ctitle,c.alias as calias,c.cat_id,o.cat_id as pcat,o.alias as parent,ps.scripts as api,ps.pay_require as pay_require');
       $query->from('#__products as p');  
       $query->join('left','#__shops_genre as g ON(p.genre_id=g.genre_id)');  
       $query->join('left','#__shops_cat as c ON(p.cat_id=c.cat_id)');
       $query->join('left','#__shops_cat as o ON(o.cat_id=c.parent)');
       $query->join('left','#__pay_system as ps ON(p.pay_type=ps.pay_id)');  
       $query->where('p.published=1');

Запрос получает категорию и субкатегорию с учетом главной категории, плюс платежный метод

Змінено користувачем esculapra
Надіслати
Поділитися на інших сайтах

59 минут назад, ililliliMusic сказал:

m.name AS manufacturer (SELECT

 

пропущена запятая

m.name AS manufacturer, (SELECT

по уму - трясти автора этого запроса, мало ли что еще

Надіслати
Поділитися на інших сайтах

Господа, всем огромное спасибо за помощь. Проблема решена. Как и сказал 100napb была какая то ересь в виде "skidka". Нарыл ее в запросе к БД в корневых файлах модели\контройлере\твиге товаров, вычистил все от нее и заработало. Видимо программист для разовых работ накосячил, будем разбираться. Всем еще раз спасибо.

Надіслати
Поділитися на інших сайтах


15 минут назад, AlexDW сказал:

по уму - трясти автора этого запроса

Точно-точно. Это может быть чисто техническая ошибка - запрос длинный, и тут легко можно накосячить. Вот потому я использую методы класса - тогда легко отследить косяки.

Надіслати
Поділитися на інших сайтах

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.