解决
请参阅下面的答案。
背景
任何熟悉zen cart的人都会知道它配备了世界上最无意义的产品排序选项,即alpha下拉分拣机。
基本上它的作用是允许您按照开头的字母/数字选择产品。好吧,当我购物时,项目的起始字母很少是一个有用的标准,所以我正在尝试创建一个更有用的产品分类器,它将按日期添加,价格和产品名称排序。然后根据属性类别进行过滤。
问题
所以我设法强迫分拣机做我自己的查询,除了价格以外的所有事情。
以下是我目前设置的价格下拉产生的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工作正常。不幸的是,这不通过zen cart工作,我得到了php错误:
PHP致命错误:1054:'order子句'中的未知列'final_price' :: SELECT p.products_id,p.products_price_sorter, p.master_categories_id,p.manufacturers_id FROM products p LEFT JOIN p.products_id = s.products_id LEFT JOIN上的特价商品 products_description pd on p.products_id = pd.products_id加入 products_to_categories p2c on p.products_id = p2c.products_id WHERE p.products_status = 1 \ r \ n和pd.language_id ='1'\ r \ n和 p2c.categories_id ='1'GROUP BY p.products_id ORDER BY final_price ASC在/var/www/includes/classes/db/mysql/query_factory.php上 101
所以我查看了第101行,它引用了数据库抽象类中的错误处理方法。有没有人知道这里出了什么问题以及如何解决它?
答案 0 :(得分:1)
'final_price'实际上不是数据库中的字段;它是购物车对象中每个订单项条目的一部分。您可以使用数据库按基准价格(也不是按属性定价且没有其他定价属性的产品的最终价格)进行排序。
答案 1 :(得分:0)
感谢所有看过这个的人。我设法解决了这个问题。不知道为什么,但我从错误消息中注意到别名没有通过db抽象类。但是,它正在生产p.products_price_sorter。所以我设法通过使用以下方式对价格进行排序:
ORDER BY p.products_price_sorter
希望这有助于某人
<强>更新强>
在我花了几天时间让它工作并且玩得很好之后,这个插件由Scott Wilson建议: http://www.zen-cart.com/downloads.php?do=file&id=1612 因此,如果您正在阅读本文,则可能需要检查 - 它允许在高级搜索和类别页面上对您的产品进行自定义排序。