2013-03-01 87 views
1

我想每天都找到最暢銷的三款產品,並且 將它們和銷售量一起展示出來。每天找到最暢銷的三款產品php mysql

但是,如果有多個產品共享相同的 銷售數量,我只想告訴有多少產品得到了這個 的排名。

我有兩個表

Products: 
+-----+---------+ 
| Pid | Product | 
+-----+---------+ 
| 1 | Moon | 
| 2 | Sun  | 
| 3 | Venus | 
| 4 | Mars | 
+-----+---------+ 

SalesRows: 
+-----+---------+------------+ 
| Pid | No_sold | Sales_date | 
+-----+---------+------------+ 
| 1 | 1 | 2013-01-01 | 
| 2 | 5 | 2013-01-01 | 
| 3 | 2 | 2013-01-01 | 
| 2 | 2 | 2013-01-01 | 
+-----+---------+------------+ 

應該給:

+------+--------------+-------+ 
| Rank | Product  | Sales | 
+------+--------------+-------+ 
| 1 | Sun   | 7 | 
| 2 | Venus  | 2 | 
| 3 | Moon   | 1 | 
+------+--------------+-------+ 

但是這個銷售數據:

SalesRows: 
+-----+---------+------------+ 
| Pid | No_sold | Sales_date | 
+-----+---------+------------+ 
| 1 | 1 | 2013-01-01 | 
| 2 | 5 | 2013-01-01 | 
| 3 | 2 | 2013-01-01 | 
| 2 | 2 | 2013-01-01 | 
| 4 | 1 | 2013-01-01 | 
+-----+---------+------------+ 

應該給:

+------+--------------+-------+ 
| Rank | Product  | Sales | 
+------+--------------+-------+ 
| 1 | Sun   | 7 | 
| 2 | Venus  | 2 | 
| 3 | *2 products* | 1 | 
+------+--------------+-------+ 

任何建議如何解決這最後一部分?

回答

2

這種查詢可以幫助你。

SELECT @rownum := @rownum + 1 rownum, 
     t.* 
    FROM (SELECT @rownum:=0) r, 
     (select case when indicator = 1 then Product 
else concat(indicator, ' Products') end as Product, sales from (Select *, count(sales) as indicator from (SELECT Product,SUM(No_sold) AS sales FROM SalesRows 
JOIN Products ON Products.Pid = SalesRows.Pid 
WHERE Sales_date = curdate() 
GROUP BY SalesRows.Pid) a group by sales Order by sales desc) a) t 
+0

非常感謝! – 2013-03-01 09:11:50

0

試試這個:

SELECT Product,SUM(No_sold) AS sales FROM SalesRows 
LEFT JOIN Products ON Products.Pid = SalesRows.Pid 
WHERE Sales_date = '".$today."' 
GROUP BY Pid 
+0

如果你實際解釋了SQL語句,而不是隻是提供它,會更好。 – 2013-03-01 07:51:33

+0

這不按排名排序,也不能解決問題當兩個或更多產品獲得相同排名時如何呈現 – 2013-03-01 08:07:31

相關問題