【问题标题】:Order by rate in MySQL在 MySQL 中按速率排序
【发布时间】:2013-07-04 08:14:40
【问题描述】:

在我的数据库中有 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

【问题讨论】:

标签: php mysql rate


【解决方案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

【讨论】:

  • 一会儿,只显示产品,那些有率。怎么办,显示没有评分的产品(投票)
  • @serikshaikamalov 您可以使用左连接而不是内连接,它将返回所有产品
猜你喜欢
  • 2020-12-13
  • 1970-01-01
  • 1970-01-01
  • 2013-08-24
  • 2010-11-10
  • 2012-11-05
  • 2012-09-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多