您的位置:首页 > 数据库 > MySQL

MySQL的SQL 语句:根据从表记录个数对主表排序

2010-03-08 19:35 281 查看
MySQL的SQL 语句:根据从表记录个数对主表排序

一个主表 news,有字段 nId(自动增长),sName。

记录:

10 name10

13 name13

20 name20

21 name20

21 name20

30 name20

从表 reply,字段 nId(自动增长),pId,sReply。

记录:

20 aaaaa

13 bbbbb

10 ccccccc

20 vvvvvv

20 hhhhhh

10 sssss

从表以字段 pId 与主表字段 nId 关联。

目的:由主表取若干记录,排序依据:根据从表中与主表关联的记录的个数来排序。

以上述的记录为例,主表的记录顺序应该为:

20 name20

10 name10

13 name13

答案1:

select *, count(*) as iReply from

(SELECT a.nId, a.sName, b.sReply FROM news a, reply b WHERE a.nId=b.pId) as T

group by nId order by iReply limit 0,3

答案2:

SELECT a.nId, a.sName, count(b.sReply) as iReply from FROM news a, reply b WHERE a.nId=b.pId

group by a.nId order by iReply limit 0,3

注:

1,以上两例中形如 group by a.nId 的字段 nId 的值应该保持唯一性,最好是建有唯一性索引。

2,第一例似乎比较容易理解,即从联合查表的结果中再次查表。联合查表的结果作为一个“表”,再操作它 - 注意这里的 SQL 语句的语法值得借鉴。

3,好的解决方法应该是第二例。

4,但以上两例的做法的最大缺点是,效率太低!联合查表是最表的笛卡尔乘积,查询数量是两个表记录数的乘积。这对于大表查询将是致命的。

好的做法是,在主表中建一个字段表示从表的记录个数,每次向从表插入记录和删除记录时都同时修改该字段的值。则达到题目的目的,只要查主表、排序就可以了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mysql SQL 记录 语句 主表