2017-10-29 49 views
1

我想弄清楚如何顯示每個類別的一定數量的產品和按銷售數量過濾。我似乎無法弄清楚。如何根據類別限制和顯示結果?

可以說我的數據庫「mysql」中有100個產品處於5個不同的類別,我想每頁顯示10個結果,但每個類別顯示2個結果每頁,並按number_of_sales過濾從最高到最低。什麼是最好的方式去做這件事?

我有一個測試表已經創建,我在這6列這是ID,PRODUCT_ID,PRODUCT_NAME,類別,CATEGORY_ID,number_of_sales

id, product_id, product_name, category, category_id, number_of_sales 
1 | 1   | product1 | category1 | 1   | 5 
2 | 2   | product2 | category1 | 1   | 10 
3 | 3   | product3 | category1 | 1   | 15 
4 | 4   | product4 | category1 | 1   | 4 
5 | 5   | product5 | category1 | 1   | 6 
6 | 6   | product6 | category2 | 2   | 14 
7 | 7   | product7 | category2 | 2   | 6 
8 | 8   | product8 | category2 | 2   | 1 
9 | 9   | product9 | category2 | 2   | 0 
10 | 10   | product10 | category2 | 2   | 2 
11 | 11   | product11 | category3 | 3   | 17 
12 | 12   | product12 | category3 | 3   | 2 
13 | 13   | product13 | category3 | 3   | 6 
14 | 14   | product14 | category3 | 3   | 4 
15 | 15   | product15 | category3 | 3   | 7 
16 | 16   | product16 | category4 | 4   | 3 
17 | 17   | product17 | category4 | 4   | 8 
18 | 18   | product18 | category4 | 4   | 7 
19 | 19   | product19 | category4 | 4   | 1 
20 | 20   | product20 | category4 | 4   | 0 
21 | 21   | product21 | category5 | 5   | 6 
22 | 22   | product22 | category5 | 5   | 4 
23 | 23   | product23 | category5 | 5   | 7 
24 | 24   | product24 | category5 | 5   | 8 
25 | 25   | product25 | category5 | 5   | 5 

我已經在一個while循環嘗試了許多不同的查詢,並有未能實現正確的輸出。我能夠得到的最好結果是要顯示5個結果,每個類別使用分組依次排列最高或最低銷售額。

編輯:

輸出樣本。有點像這樣。

1 product11 | category3 | 3   | 17 
2 product3 | category1 | 1   | 15 
3 product6 | category2 | 2   | 14 
4 product2 | category1 | 1   | 10 
5 product17 | category4 | 4   | 8 
6 product15 | category3 | 3   | 7 
7 product18 | category4 | 4   | 7 
8 product23 | category5 | 5   | 7 
9 product7 | category2 | 2   | 6 
10 product21 | category5 | 5   | 6 
+0

這將是更清晰如果您發佈期望的輸出示例,如示例表。 –

+0

這種類型的查詢在MySQL中很棘手。 –

+0

https://stackoverflow.com/questions/12113699/get-top-n-records-for-each-group-of-grouped-results –

回答

1

這個怎麼樣sqlfiddle

select product_name, `category`, sales 
from 
(
    select product_name, `category`, sales, 
     (@num:=if(@category = `category`, @num +1, if(@category := `category`, 1, 1))) row_number 
    from my_table t 
    CROSS JOIN (select @num:=0, @group:=null) c 
    order by `category`, sales desc, product_name 
) as x 
where x.row_number <= 2 order by sales desc; 

它從this link

可以後,其中0是你的偏移量 「的銷售DESC」 LIMIT 0, 10添加引用,offset = (page-1)*10

+0

這似乎很好。非常感謝! – rich