[英]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.