Перейти к содержанию
vivivor

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

Рекомендуемые сообщения

Есть строка взятая из 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

мне нужно добавить ее условием

если переменная равна 0 то добавляется AND p.quantity > 0 иначе ничего не происходит

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

что делает GROUP BY ps.product_id ?

если я его удаляю, то проблема решается

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

удалил 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 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.