簡體   English   中英

如何計算一列與另一張表的一列匹配的行數

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

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