[英]How to COUNT the number of rows where a column matches a column of another table
我想顯示用戶發表的帖子數量,但是我有幾個不同的表,需要匹配ID並對其進行計數。
像這樣:
用戶表
userid username email regdate
34 mister email@some.tld 2013-10-26 12:01:07
帖子表
postid creator post_comment post_title status
1 34 This is comment Post 1 published
2 12 This is comment Post 2 published
3 34 This is comment Post 3 pending
4 25 This is comment Post 4 published
5 34 This is comment Post 5 published
現在,我已經有了一個查詢,可以從用戶表中選擇有關特定用戶的所有數據:
mysqli_query($conn, "SELECT * FROM users WHERE userid = $userid");
$ userid是當前登錄的用戶的ID。這可以正常工作:選擇有關該用戶的所有相關信息。
但是我想顯示每個用戶發表的帖子數量。 我在w3schools的某個地方讀過,SQL COUNT
函數的工作原理如下:
mysqli_query($conn, "SELECT COUNT(creator) AS userposts FROM posts WHERE creator=$userid");
但是,如您在表格示例中看到的那樣,在5個帖子中,有3個來自用戶34,並且這3個中的1個未發布。
我不知道如何進行SQL查詢,該查詢將選擇userid與$ userid匹配的所有用戶,然后從帖子中選擇創建者和狀態,並計算創建者為$ userid和狀態已發布的帖子數。
這是我最終的目標輸出:
User Mister發表了2條帖子。
為了只獲取已發布的帖子數,您應該通過ANDing status = 'published'
重構條件語句
mysqli_query($conn, "SELECT COUNT(creator) AS num_posts FROM posts
WHERE creator=$userid AND status = 'published'");
SELECT COUNT(creator) AS userposts FROM posts p
LEFT JOIN users u ON p.creator=u.userid
WHERE creator=$userid AND status='published'
正如您在評論中所問的那樣,所有查詢都在一個查詢中:
SELECT users.*, COUNT(creator) AS userposts FROM users u
LEFT JOIN posts p ON p.creator = u.userid
WHERE p.creator = $userid AND p.status = 'published'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.