2013-03-16 64 views
0

這是我的數據庫。group_concat和此記錄中每個單詞的頻率

表:

item: item_id, name 
order: order_id 
orderform: order_id, item_id, quantity 

表中數據

item_id name 
1  ball 
2  cap 
3  bat 

order_id 
1 
2 
3 
4 

order_id item_id quantity 
1  1  2 
1  3  4 
2  1  1 
3  2  3 
3  1  2 
3  3  1 
4  1  2 

在我使用下面的SQL查詢的時刻:

SELECT order_id, group_concat(name) 
FROM order 
LEFT JOIN orderform 
    ON order.order_id = orderform.order__id 
LEFT JOIN item 
    ON orderform.item_id = item.item_id 
GROUP BY order.order_id 

這給了我這個看

order_id   name  
1    ball,ball,bat,bat,bat,bat 
2    ball 
3    cap,cap,cap,ball,ball,bat 
4    ball,ball 

但我希望它看起來像這樣

order_id name 
1   2 x ball,4 x bat 
2   ball 
3   3 x cap,2 x ball,bat 
4   2 x ball 

回答

2

你必須去2步:

一:解決項目和創建文本

SELECT 
    orderform.order_id AS order_id, 
    CONCAT(orderform.quantity, ' x ',item.name) AS txt 
FROM order orderform 
LEFT JOIN item ON orderform.item_id = item.item_id 

然後按順序

SELECT 
    order_id, 
    group_concat(txt) AS txt 
FROM (
    SELECT 
     orderform.order_id AS order_id, 
     CONCAT(orderform.quantity, ' x ',item.name) AS txt 
    FROM order orderform 
    LEFT JOIN item ON orderform.item_id = item.item_id 
) AS baseview 
GROUP BY order_id 
+1

非常感謝!正如我所需要的那樣工作。 – Rezus 2013-03-16 23:22:53

+0

我還有一個問題。 orderform中的某些行可能有兩行相同的order_id和相同的產品,這會導致顯示select「2 x ball,2 x ball」。有沒有辦法和相同類型的項目,以顯示它像這樣的「4×球」。謝謝 – Rezus 2013-03-16 23:56:24

+0

由於一些未知的原因,一切都乘以9.所以說說唱片應該顯示「2×球」它顯示「2×球2×球2×球2×球2×球2×球2×球2×球2 x球「 – Rezus 2013-03-17 00:21:12