2013-02-08 95 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

相關問題