2013-02-08 7 views
1

решаемыедзен корзина SQL - Выбрать товары и заказ по цене

Смотрите мой ответ ниже.

ФОН

Любые, кто знаком с дзна корзиной будет знать, что он поставляется в комплекте с мирами самым бессмысленным вариантом продукта сортировки аки выпадающего сортировщиком альфа.

По сути, это означает, что вы можете выбрать продукты по букве/номеру, с которого они начинаются. Ну, начальное письмо элемента редко является полезным критерием, когда я делаю покупки, поэтому я пытаюсь создать более полезный сортировщик товаров, который будет сортировать по дате, цене и названию продукта. а затем фильтровать на основе категории атрибутов.

ПРОБЛЕМА

Так мне удалось заставить сортировщик сделать свой собственный запрос, который работает на всем, кроме цены.

Вот SQL производится моим текущим набором вверх по цене выпадающий:

SELECT DISTINCT p.products_id, p.products_type, p.master_categories_id 
       ,p.manufacturers_id, p.products_price, p.products_tax_class_id 
       ,pd.products_description 
       ,IF(s.status = 1, s.specials_new_products_price, NULL) 
        AS specials_new_products_price 
       ,IF(s.status =1, s.specials_new_products_price, p.products_price) 
        AS final_price 
       ,p.products_sort_order 
       ,p.product_is_call 
       ,p.product_is_always_free_shipping 
       ,p.products_qty_box_status 

    FROM products p 
    LEFT JOIN specials s on p.products_id = s.products_id 
    LEFT JOIN products_description pd on p.products_id = pd.products_id 
    JOIN products_to_categories p2c on p.products_id = p2c.products_id 

    WHERE p.products_status = 1 
    and pd.language_id = '1' 
    and p2c.categories_id = '1' 

    GROUP BY p.products_id 
    ORDER BY final_price ASC 

Как вы можете видеть, что я пытаюсь разобраться на основе окончательной цены, которая является псевдонимом для любой нормальной цены или специальная цена (если установлена). Это отлично работает через phpmyadmin. К сожалению, это не работает через дзен телегу, я получаю ошибку PHP:

PHP Fatal error: 1054:Unknown column 'final_price' in 'order clause' :: SELECT p.products_id, p.products_price_sorter, p.master_categories_id, p.manufacturers_id FROM products p LEFT JOIN specials s on p.products_id = s.products_id LEFT JOIN products_description pd on p.products_id = pd.products_id JOIN products_to_categories p2c on p.products_id = p2c.products_id WHERE p.products_status = 1\r\n and pd.language_id = '1'\r\n and p2c.categories_id = '1' GROUP BY p.products_id ORDER BY final_price ASC in /var/www/includes/classes/db/mysql/query_factory.php on line 101

Так что я смотрел на линии 101 и это относится к способу обработки ошибок в классе абстракции базы данных. У кого-нибудь есть идеи, что здесь не так, и как я могу это решить?

+0

Не знаю о дзэн-телеге. Если это не разрешает псевдонимы, тогда вы останетесь с вырезанием и вставкой всего столбца def 'ORDER BY IF (s.status = 1, s.specials_new_products_price, p.products_price)' или с помощью числовой ссылки столбца 'ORDER BY 9' ... – Glenn

+0

Люди, которые смотрят на это в будущем, также могут захотеть взглянуть на вклад http://www.zen-cart.com/downloads.php?do = file & id = 1612, который имеет различные параметры сортировки. –

+0

@ScottWilson Я тебя ненавижу. Я просто провел несколько дней, создав именно то, что делает этот плагин (возможно, тоже не так), и здесь вы прибегаете к решению после жесткого отказа. Я искал это и не смог его найти. Но да, если вы читаете это. Используйте это. – WebweaverD

ответ

0

Спасибо всем, кто посмотрел на это. Мне удалось это решить. Не знаю, почему, но я заметил из своего сообщения об ошибке, что псевдоним не прошел через класс абстракции db. Однако где-то по пути он производит p.products_price_sorter. Таким образом, мне удалось разобраться в цене с помощью:

ORDER BY p.products_price_sorter 

Надеется, что это помогает кто-то

UPDATE

После того как я провел несколько дней получаю эту работу и играть хорошо, этот плагин был предложен Скотт Уилсон: http://www.zen-cart.com/downloads.php?do=file&id=1612 Итак, если вы читаете это, возможно, стоит проверить - он позволяет настраивать сортировку ваших товаров на страницах расширенного поиска и категории.

1

'final_price' на самом деле не является полем в базе данных; это часть каждой записи позиции в объекте корзины покупок. Вы можете отсортировать по базовой цене (которая также будет конечной ценой для продуктов, которые не оцениваются по атрибутам и не имеют дополнительных атрибутов цены) с использованием базы данных.

+0

Это не учитывало бы особые цены (скидки), где, как и p.products_price_sorter, - это альтернатива, если вы Не хотите включать специальные цены в сортировку. К счастью, у меня есть только один атрибут цены и его дополнительный вариант. Я бы не хотел заниматься этим, если бы у меня были атрибуты, брошенные в микс. – WebweaverD

+0

Я уверен, что он учитывает встроенные скидки, такие как скидки на продажу, скидки и скидки (родной для Zen Cart). –

+0

Я видел с вашего сайта, что у вас есть немного опыта в этих вопросах. Поэтому, возможно, игнорировать мой предыдущий комментарий. Но я не могу увидеть что-то еще, связанное с ценой, которое выбрано в sql-запросе, бросая ошибку ... Я думаю, что запрос sql исходит из плагина динамического фильтра, который может (на самом деле определенно) путать вопросы. В любом случае, я отсортирован сейчас, мне просто нужно заставить его хорошо играть с динамическим фильтром. – WebweaverD

Смежные вопросы