在我的数据库中有2个表:
产品表:
---------------
id | title
---------------
1 Toyoto
2 Lexux
评级表:
----------------------------------------
rating_id | rating | id | ip
----------------------------------------
1 l 1 127.0.0.1
2 d 1 127.0.0.2
3 l 1 192.168.0.1
4 l 2 192.168.0.1
-----------------------------------------
所以Toyoto有2 l
(喜欢)和1 d
(不喜欢)。所以我想根据喜欢和不喜欢对所有产品进行排序(总结喜欢和不喜欢)。在最后一个输出中将是:
Toyouto 3 votes and Lexux 1 vote.
订单:
1. Toyoto
2. Lexux
答案 0 :(得分:1)
SELECT
products.title
FROM
products INNER JOIN ratings
ON products.id = ratings.id
GROUP BY
products.id,
products.title
ORDER BY
SUM(ratings.rating='l')-SUM(ratings.rating='d')
请参阅小提琴here。
如果您还想显示排名,可以使用:
SELECT @rank:=@rank+1 as rank, title
FROM (
SELECT
products.title
FROM
products INNER JOIN ratings
ON products.id = ratings.id
GROUP BY
products.id,
products.title
ORDER BY
SUM(ratings.rating='l')-SUM(ratings.rating='d')
) s, (SELECT @rank:=0) r
小提琴是here。