0

我需要有关创建内部联接查询的帮助。

我有 2 张桌子、博客和追随者。

在 blogs 表中,我有所有的博客信息,然后在关注者中,我有两个字段,分别是用户 ID 和用户关注的博客 ID。

我想创建一个查询,该查询将按有多少关注者对博客进行排序。

所以这是我用来显示用户正在遵循的构建的示例(供参考):

    $query = "SELECT * FROM blogs INNER JOIN followers ON (blogs.id = followers.blogid) WHERE followers.userid='" .$usernamesesh. "'";

我怎样才能创建一个类似的查询来选择所有的博客,但按照从高到低的追随者顺序排列它们。

希望这是有道理的,由于某种原因,我无法理解这个问题!

唯一的其他选择是在博客表中添加一些关注者字段,但这将涉及更改我的关注脚本等。

克雷格。

4

4 回答 4

1

如果不知道您的表的确切结构,就很难说。假设您的关注者表看起来像这样

   blogid | userid
   -------+----------
     1    |  2
   -------+----------
     1    |  1
   -------+----------
     1    |  3
   -------+----------
     2    |  2
   -------+---------

 SELECT blogid, COUNT(userid) AS UserCount FROM followers 
 GROUP BY blogid ORDER BY UserCount DESC;

然后,您可以加入 blogs 表以从该表中获取您需要的任何列。

SELECT blogs.*, IFNULL(f.UserCount,0) AS UserCount
FROM blogs 
 LEFT JOIN (
    SELECT blogid, COUNT(userid) AS UserCount FROM followers 
    GROUP BY blogid
 ) f
 ON f.blogid = blogs.id
 ORDER BY UserCount DESC
于 2013-10-31T15:32:41.913 回答
0

我建议稍微调整一下 Mihai 的建议,所以将此字符串添加到查询的末尾:GROUP BY blogs.id ORDER BY COUNT(userid) DESC

于 2013-10-31T15:34:43.290 回答
0
$query = "SELECT blogs.id, count(*) AS total FROM blogs INNER JOIN followers ON (blogs.id = followers.blogid) WHERE followers.userid='" .$usernamesesh. "'" GROUP BY blogs.id ORDER BY total;

希望这可以帮助

于 2013-10-31T15:35:33.073 回答
0

你可以加入一个子查询:

SELECT blogs.*, s.cnt
FROM blogs 
     LEFT JOIN (SELECT blogid, count(*) as cnt 
                FROM followers
                GROUP BY blogid) s
     ON s.blogid = blogs.id
ORDER BY s.cnt

编辑

CREATE TABLE blogs (id);
create TABLE followers(blogid);
INSERT into blogs values (1),(2),(3);
INSERT into followers values (1),(1),(3);

你得到:

id          cnt
----------  ----------
2
3           1
1           2
于 2013-10-31T15:31:50.427 回答