Mysql如何实现跨表查询排序

工程师爸爸 发布于 2012/04/27 17:27
阅读 1K+
收藏 2

问题说明

现有表字段结构如下:

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语句即可达到查询按留言数量排序的结果?

加载中
1
鉴客
鉴客
下面这个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)
mark35
mark35
回复 @鉴客 : 是的,我是补注下。对于以后可能接触其他数据库的来说mysql的非标准很害人
鉴客
鉴客
回复 @mark35 : 人家就是要MySQL的哦:)
mark35
mark35
输出字段有不包含在GROUP BY中字段,所以此条SQL仅适用于mysql,不具有移植性~
0
jobell
jobell

select m.*,(select  count(c.mid) from comment c where c.id=m.id) as c_count

from message   m

order by  c_count desc

0
mark35
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

 

0
郑雨涵
郑雨涵

引用来自“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

 

学会看执行计划
mark35
mark35
mysql那简陋的查询计划……
0
鉴客
鉴客
@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获取对象信息

mark35
mark35
是的,标准SQL的做法是在这结果外面再包一两层查询逐步实现要求。mysql这种不标准的实现倒是低碳也~
返回顶部
顶部