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

Изменить запрос в getProducts


Recommended Posts

Подскажите как правильно изменить запрос к БД добавив одно условие
Есть вот что:
 

public function getProducts($data = array()) {
	$sql = 
	"SELECT p.product_id, 
	(SELECT AVG(rating) 
	AS total FROM " . DB_PREFIX . "review r1 
	WHERE r1.product_id = p.product_id 
	AND r1.status = '1' 
	GROUP BY r1.product_id) 
	AS rating, 
	(SELECT price FROM " . DB_PREFIX . "product_discount pd2 
	WHERE pd2.product_id = p.product_id 
	AND pd2.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' 
	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 " . DB_PREFIX . "product_special ps 
	WHERE ps.product_id = p.product_id 
	AND ps.customer_group_id = '" . (int)$this->config->get('config_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())) 
	ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) 
	AS special";

Нужно добавить условие, отбирать те ID у которых isbn = 1
Проверил такой запрос напрямую в mysql, он дает нужный мне результат:

SELECT product_id FROM oc_product WHERE isbn = '1'

Пробовал заменить строчку существующего кода на свой: 
SELECT p.product_id,  заменил на SELECT product_id FROM " . DB_PREFIX . "product WHERE isbn = '1',

Еще вот так подставлял. Общем разные варианты пробовал.....

"SELECT p.product_id FROM " . DB_PREFIX . "product p WHERE isbn = '1',

 

И у меня ничего хорошего с этого не вышло. Понимаю что знаний не хватает, прошу помощи.

 

 

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

Первое, что бросается в глаза
нет указания на таблицу
если поле isbn пронаджежит таблице product, то должно, как минимум, быть

p.isbn = '1'

и, судя по всему, кусок кода не докопипастили
там, где что-то типа:

FROM " . DB_PREFIX . "product p"

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


  В 10.02.2017 в 15:34, nikifalex сказав:

вы в курсе что ISBN это Международный стандартный книжный номер. Зачем вы туда пишете единицу?

Expand  

Ну возможно это просто для теста "1"

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


Я думал вам дописать условие но прочитал ваш запрос у вас он не полный нет select к product чтобы получтьб полный код запроса вставте переменую $sql в var_dump

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

  В 10.02.2017 в 15:17, AlexDW сказав:

AS special WHERE isbn = '1' ";

Expand  

Спасибо! Но наверное этого мало, к сожалению. Получаю ошибку.

  В 10.02.2017 в 15:34, nikifalex сказав:

вы в курсе что ISBN это Международный стандартный книжный номер. Зачем вы туда пишете единицу?

Expand  

Использую это поле в своих целях.
 

  В 10.02.2017 в 15:49, konorws сказав:

Я думал вам дописать условие но прочитал ваш запрос у вас он не полный нет select к product чтобы получтьб полный код запроса вставте переменую $sql в var_dump

Expand  

Да, я часть только взял. Думал ключевое находится именно там...

  Показати вміст

 

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

Находите код

что то типа

if (!empty($data['filter_filter'])) {
                $sql .= " LEFT JOIN " . DB_PREFIX . "product_filter pf ON (p2c.product_id = pf.product_id) LEFT JOIN " . DB_PREFIX . "product p ON (pf.product_id = p.product_id)";
            } else {
                $sql .= " LEFT JOIN " . DB_PREFIX . "product p ON (p2c.product_id = p.product_id)";
            }
        } else {
            $sql .= " FROM " . DB_PREFIX . "product p";
        }

 

дописываете в каждой строчке для  sql

 WHERE p.isbn='1'

либо в низу под этим кодом

$sql.="  WHERE p.ibsn='1' ";

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


  В 10.02.2017 в 16:09, ElSch сказав:

дописываете в каждой строчке для  sql

Expand  

к чему такие сложности?

достаточно добавить

$sql.="  AND p.isbn='1' ";

перед строкой

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

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

Я так понимаю что задействован фильтр, но все товары задействованы до фильтрации...?
Дело вот в чем. Отображается на странице 8 товаров (у которых isbn=1), но внизу присутствует пагинация и количество товаров:

Показано с 1 по 40 из 84 (всего 3 страниц) 

 

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

  В 10.02.2017 в 16:59, ElSch сказав:

Для пагинации надо еще  менять запрос в getTotalProducts

Expand  

Еще раз благодарю!

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

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

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

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

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

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

Вхід

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

Вхід зараз
×
×
  • Створити...

Important Information

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