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

Дублирование товаров при сортировке "по умолчанию"

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

Добрый день. Версия ocstore_v1.5.4.1. Когда товаров больше чем на 1 страницу, то со 2ой страницы они начинают повторяться. Подобная тема уже была. Но код сортировке приведенный там (якобы это решение) в 1.5.4.1 точно такой. У кого была подобная проблема? И ещё, при сортировке по цене этот глюк пропадает.

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


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

поставил каждому товару разный порядок сортировки, проблема вроде бы исчезла. такое поведение опенкарт это нормально? порядок сортировки всегда надо ставить разный у товаров?

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


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

Такая же ерунда ( Пока решил заменой кода выюорки в catalog/model/catalog/product.php на 



if (isset($data['order']) && ($data['order'] == 'DESC')) {
  $sql .= " DESC, LCASE(pd.name) DESC";
} else {
  $sql .= " ASC, LCASE(pd.name) ASC";
}

Теперь сортируется также по именам, потом буду думать как поступать дальше. Версия опенкарта - 1.5.1.3

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


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

Приподниму тему

SELECT SQL_CALC_FOUND_ROWS DISTINCT (
p.product_id
), p.sort_order
FROM oc_product_to_category p2c
LEFT JOIN oc_product p ON ( p2c.product_id = p.product_id )
LEFT JOIN oc_product_to_store p2s ON ( p.product_id = p2s.product_id )
WHERE p.status = '1'
AND p.date_available <= '2016-12-26 20:40:00'
AND p2s.store_id = '0'
AND p2c.category_id
IN ( 10 )
ORDER BY p.sort_order ASC
LIMIT 0 , 15

и далее

limit 15, 15

 

Не гарантирует однозначный порядок

 

Причина - реляционная база данных не гарантирует последовательность выборки.

 

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

 

Для гарантирования выборки нужен однозначный  ключ

 

Например

SELECT SQL_CALC_FOUND_ROWS DISTINCT (
p.product_id
), p.sort_order
FROM oc_product_to_category p2c
LEFT JOIN oc_product p ON ( p2c.product_id = p.product_id )
LEFT JOIN oc_product_to_store p2s ON ( p.product_id = p2s.product_id )
WHERE p.status = '1'
AND p.date_available <= '2016-12-26 20:40:00'
AND p2s.store_id = '0'
AND p2c.category_id
IN ( 10 )
ORDER BY p.sort_order ASC, p.product_id
LIMIT 0 , 15

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


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

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

×

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

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