簡體   English   中英

內部聯接查詢建議

[英]Inner Join Query Advice

我需要有關創建內部聯接查詢的幫助。

我有2個表格,博客和關注者。

在Blogs表中,我具有所有博客信息,然后在Followers中,我具有兩個字段,分別是用戶ID和用戶遵循的Blog ID。

我想創建一個查詢,以按有多少關注者排序博客。

因此,這是我用來顯示用戶正在構建的內容的示例(供參考):

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

我該如何創建類似的查詢,該查詢將選擇所有博客,但按關注者從高到低的順序對其進行排序。

希望這是有道理的,出於某種原因我無法理解!

唯一的其他選擇是在Blogs表中添加許多關注者字段,但這將涉及更改我的關注腳本等。

克雷格。

如果不知道表的確切結構,就很難說出來。 假設您的關注者表看起來像這樣

   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

您可以加入子查詢:

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

我建議稍微調整一下Mihai的建議,因此請將此字符串添加到查詢的末尾: GROUP BY blogs.id ORDER BY COUNT(userid) DESC

$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;

希望這可以幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM