【问题标题】:MYSQL - Order a table by another tableMYSQL - 按另一个表排序一个表
【发布时间】:2019-08-06 22:00:53
【问题描述】:

我有问题 我有两张桌子

“模因”表

id       imglink      name
----------------------------------
1        img.Png      Polite cat
2        img2.png     Crying cat

还有表格“投票”

id    idmeme    vote
---------------------
1     1           5
2     1           2
3     2           4

所以基本上“模因”表包含模因及其图像和名称 “投票”表包含用户分配给模因的 5 个注释

我希望我的 sql 查询按照最高评分和最高评分进行排名

我已经看过其他主题,但问题是对于每个具有相同 id 的投票,它在 SELECT * 的结果中重复

提前谢谢你

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    一种方法是在order by 中使用子查询:

    select m.*
    from memes m
    order by (select max(v.vote) from vote v where v.idmeme = m.id);
    

    当然,您也可以将其包含在from 子句中(作为聚合查询)并使用join

    【讨论】:

    • 我不知道为什么,但礼貌的猫是第一位的,所以他的分数是 2.3,其他的分数是 3
    • ORDER BY 的默认值是 ascending,因此 2.3 的值将出现在 的值之前b>3。如果我们首先想要最高值,我们可以添加关键字DESC,即。 ORDER BY some_expresssion DESC
    【解决方案2】:

    最有效的方法是使用从Vote 返回所有最大票数的查询并将其连接到表中:

    select m.*
    from Memes m left join (
      select idmeme, max(vote) vote
      from Vote
      group by idmeme
    )v on v.idmeme = m.id
    order by v.vote desc, m.name
    

    请参阅demo
    结果:

    | id  | imglink  | name       |
    | --- | -------- | ---------- |
    | 1   | img.Png  | Polite cat |
    | 2   | img2.png | Crying cat |
    

    【讨论】:

      猜你喜欢
      • 2014-09-22
      • 1970-01-01
      • 2011-04-26
      • 1970-01-01
      • 2012-10-31
      • 2020-09-08
      • 1970-01-01
      • 1970-01-01
      • 2021-03-10
      相关资源
      最近更新 更多