5
回答
Mysql如何实现跨表查询排序
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

问题说明

现有表字段结构如下:

1、message  

         ————id    (自增,主键)

         ————title

         ————content

2、comment

        ————id    (自增,主见)

        ————mid    (message表 id)

        ————contnets

现要求,查询出message表中所有字段数据,和 以当前id查询comment表中 含有mid的条数。

并按照 message表中回复数量进行排序

方案1、从message表中取出数据,取数据同时 一取出当前ID为条件 执行 SELECT mid FROM comment 然后计算返回结果数。压入从message表中取出数据数组内。然后使用排序方法对数组进排序。

问:如何实现使用1条SQL语句即可达到查询按留言数量排序的结果?

举报
5D同学
发帖于6年前 5回/1K+阅
共有5个答案 最后回答: 6年前
下面这个SQL
SELECT m.*,COUNT(c.mid) FROM message m LEFT JOIN comment c ON m.id = c.mid GROUP BY m.id DESC ORDER BY COUNT(c.mid)
--- 共有 3 条评论 ---
mark35回复 @鉴客 : 是的,我是补注下。对于以后可能接触其他数据库的来说mysql的非标准很害人 6年前 回复
鉴客回复 @mark35 : 人家就是要MySQL的哦:) 6年前 回复
mark35输出字段有不包含在GROUP BY中字段,所以此条SQL仅适用于mysql,不具有移植性~ 6年前 回复

引用来自“鉴客”的答案

下面这个SQL
SELECT m.*,COUNT(c.mid) FROM message m LEFT JOIN comment c ON m.id = c.mid GROUP BY m.id DESC ORDER BY COUNT(c.mid)

针对mysql,这样写是否有差别?

SELECT m.*,COUNT(c.mid) AS c FROM message m LEFT JOIN comment c ON m.id = c.mid GROUP BY m.id DESC ORDER BY c

 

引用来自“mark35”的答案

引用来自“鉴客”的答案

下面这个SQL
SELECT m.*,COUNT(c.mid) FROM message m LEFT JOIN comment c ON m.id = c.mid GROUP BY m.id DESC ORDER BY COUNT(c.mid)

针对mysql,这样写是否有差别?

SELECT m.*,COUNT(c.mid) AS c FROM message m LEFT JOIN comment c ON m.id = c.mid GROUP BY m.id DESC ORDER BY c

 

学会看执行计划
--- 共有 1 条评论 ---
mark35mysql那简陋的查询计划…… 6年前 回复
@mark35 其他数据库其实也好办,可分两次查询
SELECT m.id,COUNT(c.mid) FROM message m LEFT JOIN comment c ON m.id = c.mid GROUP BY m.id DESC ORDER BY COUNT(c.mid)

使用上述SQL先获取id列表,然后在根据id获取对象信息

--- 共有 1 条评论 ---
mark35是的,标准SQL的做法是在这结果外面再包一两层查询逐步实现要求。mysql这种不标准的实现倒是低碳也~ 6年前 回复
顶部