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

Помощь в редактировании модели product.php


Recommended Posts

Есть строка взятая из getProductSpecials

$sql = "SELECT DISTINCT ps.product_id, (SELECT AVG(rating) FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = ps.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM " . DB_PREFIX . "product_special ps LEFT JOIN " . DB_PREFIX . "product p ON (ps.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND ps.customer_group_id = '" . (int)$customer_group_id . "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) GROUP BY ps.product_id";

условием добавляю

$sql .= " AND p.quantity > 0 ";

как я понял он добавляет в конец, и выйдет вот так

GROUP BY ps.product_id AND p.quantity > 0";

но так это условие работает не корректно, если вручную добавить в другое место то все работает правильно - к примеру

AND p.quantity > 0 GROUP BY ps.product_id";

что делать?

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

А почему просто не написать:

$sql = "SELECT DISTINCT ps.product_id,
(SELECT AVG(rating) FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = ps.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating
FROM " . DB_PREFIX . "product_special ps
LEFT JOIN " . DB_PREFIX . "product p ON (ps.product_id = p.product_id)
LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id)
LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id)
WHERE p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') .
"' AND ps.customer_group_id = '" . (int)$customer_group_id . "' AND ((ps.date_start = '0000-00-00' OR ps.date_start <
NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW()))
AND p.quantity > 0
GROUP BY ps.product_id";

В смысле, почему вы просто не можете вставить ваш код прямо в выражение, а хотите добавить через

$sql .= " AND p.quantity > 0 ";

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


добавить вручную в нужное место, перед GROUP BY если так нужно. После не правильно, будет ошибка.

если хотите все сделать через vqmod но нужно делать через replace, изменяя всю sql строку.. или чтобы не изменять всю строку, можно воспользоваться например str_replace или preg_replace, то есть один костыль заменить другим :)

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

Все, решил проблему

удалил GROUP BY ps.product_id и после условия добавил

$sql .= " GROUP BY ps.product_id";

Всем спасибо)

Если условие не очень сложное, то можно сразу так:

$sql = "SELECT DISTINCT ps.product_id,
(SELECT AVG(rating) FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = ps.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating
FROM " . DB_PREFIX . "product_special ps
LEFT JOIN " . DB_PREFIX . "product p ON (ps.product_id = p.product_id)
LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id)
LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id)
WHERE p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') .
"' AND ps.customer_group_id = '" . (int)$customer_group_id . "' AND ((ps.date_start = '0000-00-00' OR ps.date_start <
NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW()))" .
($conditional ? " AND p.quantity > 0 " : " ") .
"GROUP BY ps.product_id";

где $conditional - логическая переменная, в вашем случае - нужное условие.

GROUP BY

группирует результаты выдачи запроса к БД по указанному полю.

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


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

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

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

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

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

Вхід

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

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

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

Important Information

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