1

解决了

请看下面我的回答。

背景

任何熟悉 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:'订单子句'中的未知列'final_price' :: SELECT p.products_id,p.products_price_sorter,p.master_categories_id,p.manufacturers_id FROM products p LEFT JOIN specials 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 在 /var/www/includes/classes/db/mysql/query_factory.php 第 101 行

所以我查看了第 101 行,它引用了数据库抽象类中的错误处理方法。有谁知道这里出了什么问题以及我该如何解决它?

4

2 回答 2

1

“final_price”实际上不是数据库中的字段;它是购物车对象中每个行项目条目的一部分。您可以使用数据库按基本价格(这也是未按属性定价且没有附加定价属性的产品的最终价格)进行排序。

于 2013-02-08T18:29:26.110 回答
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 所以如果你正在阅读这个它可能值得一试 - 它允许在高级搜索和类别页面上对您的产品进行自定义排序。

于 2013-02-08T17:58:59.753 回答