我真的很苦惱,現在已經很久了,並且已經在這裏問了兩個問題!生氣 - 我需要根據條件對結果進行分組
因此,這裏有一個希望更明確的問題。
我有一個包含幾千種產品的產品數據庫。
產品可以按item
分組,以便不會在我的搜索結果中顯示基本相同但結尾不同的多個項目。
所以,一個簡單的select
查詢看起來像:
SELECT * FROM products GROUP BY item
這會給我所有的產品只顯示了每個項目(該想法是,觀察客戶點擊別的東西來顯示所有的完成選項)
我可以使用類似
SELECT *, GROUP_CONCAT(finishes) FROM products GROUP BY item
但讓我完成選項...這裏就是我有問題
在我的搜索結果頁面中,分組的「隨機」順序對我來說並不好。我需要能夠有從小組條款取決於以下condtions
- If there is no stock of any finish, then display the cheapest option
- If there is stock, then display the cheapest item which is in stock
獲取只是一個ID是不行的,我需要完整的記錄顯示的項目,所以在某種程度上我需要的是一個條件語句確定分組記錄的呈現順序,以確保我從recordset
獲得的項目符合上述標準。
我根本無法解決如何做到這一點,我嘗試了數百萬個不同的INNER JOIN
和'CASE場景,但卻無法讓它工作。
這裏就是我得今天上午:
這是給我的結果,而是形成原因,一些項目被排除在結果和排序順序仍然是不正確的。
要回答以下@DRapp,這裏的一些基本的樣本數據
item | price | finish | totalStock
item 1 | £1 | red | 2
item 1 | £1 | blue | 1
item 1 | £1.50 | blue & red | 1
item 2 | £2 | red | 0
item 2 | £3 | blue | 1
item 3 | £3.50 | blue & red | 1
item 3 | £1 | red | 0
item 3 | £2 | blue | 1
item 4 | £4.50 | blue & red | 1
item 5 | £1.50 | blue | 0
item 5 | £2.50 | green | 0
item 5 | £0.50 | orange | 0
我想看到的結果是:
- 項目1,紅(sumTotalStock = 4) - 「紅色和藍色的股票都最廉價的&。示任一結果是好的,但爲100%的完美,顯示出紅色作爲庫存是最大
- 項目2,藍色(sumTotalStock = 1) - 」藍色是唯一的完成的庫存
- 項目3,藍(sumTotalStock = 2) - 「顯示藍色,因爲它是最便宜的股票
- 項目4,藍色&紅(sumTotalStock = 1)-'there沒有完成的選項,所以只顯示這一塊,無論股票/價格
- item 5,orange(sumTotalStock = 0) - 'none i n股票,但顯示橙色,因爲它是最便宜的。
顯然有更多的數據,以實際顯示比剛跑完,價格,產品說明等也,這可能取決於完成,因此我也需要得到完整的記錄,但是這個數據的例子應該解釋原則。
在Oracle中,我會寫一個USER DEFINED AGGREGATE FUNCTION - 不確定是否有關於mysql。也許寫一個函數,將該項目作爲參數,然後返回一個完成的字符串。 – Randy 2012-03-18 13:51:45
很確定這是一個最大的每組問題的例子。搜索帶標籤的問題以查看可能有所幫助的一些解決方案:http:// stackoverflow。com/questions/tagged/most-n-group- – 2012-03-18 13:53:12
您可以轉儲一些示例數據,包括沒有完成的示例數據以及定價樣本等。然後展示你想要什麼樣的最終結果(如果Martijn的回答不是你的最終結果) – DRapp 2012-03-18 14:41:34