2013-02-08 87 views
1

解决Zen Cart的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正常工作。不幸的是,这是不是通过Zen Cart的工作,我得到了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 2013-02-08 17:46:24

+0

以后看这个的人可能也想看看贡献http://www.zen-cart.com/downloads.php?do = file&id = 1612,它有各种排序选项。 – 2013-02-10 23:58:44

+0

@ScottWilson我讨厌你的男人。我刚刚花了好几天的时间来创建该插件的功能(可能不是那么好),在这里,你会在艰难的日子之后来到解决方案。我搜索了这个,并找不到它。但是,如果你正在阅读这个。使用它。 – WebweaverD 2013-02-13 16:54:14

回答

0

谢谢所有看过此文的人。我设法解决这个问题。不知道为什么,但我从我的错误消息中注意到别名并没有传递给数据库抽象类。然而,它一直在生产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 2013-02-08 18:49:59

+0

我很确定它确实考虑了内置折扣,如销售,特价和数量折扣(Zen Cart原生)。 – 2013-02-08 20:22:06

+0

我从你的网站看到你在这些事情上有一定的经验。所以也许无视我以前的评论。但我实际上看不到任何其他价格相关被选中在SQL查询抛出错误...我认为,SQL查询来自动态过滤插件可能(事实上肯定是)令人困惑的事情。无论哪种方式,我现在排序,我只需要得到它与动态过滤器很好地发挥。 – WebweaverD 2013-02-08 20:51:26