0

我有两张桌子

数据库2:

id, db1id, text, count_db1

数据库1:

id, text

上面的 db2 是由

SELECT *, COUNT(`db1id`) AS count_db1 FROM `db2` GROUP BY `db1id` ORDER BY count_db1 DESC

所以最后一列被添加,整个输出按count_db1降序排序。

db1ids 是 db1 的 ID。我想要

SELECT * FROM db1

按 db1 中 count_db1 的值排序。如果 db2 中不存在 db1 的 id 作为 db1id,则应将其添加到列表的末尾(即为 count_db1 分配值 0)。

例子:

db2:
id, db1id, text, count_db1
1,4,hello,5
2,4,hello,5
3,4,ho,5
5,4,yeah,5
6,4,no,5
4,3,no,1

db1:
id, text
3, yeahright
4, whatever

所以在 db2 中 db1id 4 出现 5 次, db1id 3 出现 1 次。因此,对 db1 的条目进行排序,使 id 4 在 id 3 之前。结果应该是:

  1. 任何
  2. 对对对
4

3 回答 3

1

一个简单LEFT JOIN的 aCOUNT应该做你想做的事;

SELECT db1.*
FROM db1
LEFT JOIN db2
  ON db1.id=db2.db1id
GROUP BY db1.id, db1.text
ORDER BY COUNT(db2.id) DESC

一个用于测试的 SQLfiddle

于 2013-05-09T12:22:22.707 回答
0

我没有测试这个。但也许它对你有用:

SELECT db1.text FROM db1 INNER JOIN `db2` ON db2.db1id = db1.id 
GROUP BY `db1id` 
ORDER BY (COUNT(`db1id`)) DESC

编辑:由于您还想查看“空”记录,因此您应该LEFT JOIN按照其他海报的说明使用。

SELECT db1.text FROM db1 LEFT JOIN `db2` ON db2.db1id = db1.id 
GROUP BY db1.id, db1.text 
ORDER BY (COUNT(`db1id`)) DESC
于 2013-05-09T12:22:29.653 回答
0

LEFT JOIN在这种情况下是首选,因为您仍然希望记录 on显示db1在列表中,即使.iddb2.db1id

SELECT  a.text
FROM    db1 a
        LEFT JOIN db2 b
            ON a.id = b.db1id
GROUP   BY a.id, a.text
ORDER   BY COUNT(b.db1id) DESC

要进一步了解有关联接的更多信息,请访问以下链接:

于 2013-05-09T12:22:47.617 回答