經過 4 天的網路嘗試和研究,我無法實作我的愿望。
任何幫助,將不勝感激 !
在 MYSQL WORKBENCH 上執行
我得到了一個由 3 個表組成的資料庫:
| 用戶 | 帖子 | 喜歡 |
|---|---|---|
| 用戶名 | ID | ID |
| ID | 標題 | userId(來自 user.id 的外鍵) |
| 電子郵件 | 內容 | postId(來自posts.id的外鍵) |
| 密碼 | 日期 | |
| 圖片 | 圖片網址 | |
| userId(來自 user.id 的外鍵) |
我想要一個查詢,該查詢將從 USER 和 POSTS 獲取具體資料,加上按帖子 ID 排序的每個帖子的總點贊數,如果此 ID 不存在點贊,則總結果為 0。這是我希望查詢執行的操作串列:
- 在 USER 和 POSTS 中選擇具體資料;( 在職的 )
- 計算每個帖子的點贊總數,如果任何帖子沒有點贊,則給我總計 0;
我的實際查詢:
SELECT P.id, P.userId, P.title, P.content, P.date, P.imageUrl, U.username, U.permission, U.image,
COUNT(CASE WHEN L.postId = P.id THEN 1 ELSE NULL END) AS totalLikes
FROM posts AS P
LEFT JOIN user AS U
ON U.id = P.userId
LEFT JOIN likes AS L
ON P.id = L.postId
ORDER BY P.id DESC;
這僅回傳 1 個帖子,其中包含資料庫中所有喜歡的計數,所以不是我所期望的 :-(
uj5u.com熱心網友回復:
僅在內部進行聚合likes,然后將其他表連接到聚合的結果集:
SELECT P.id, P.userId, P.title, P.content, P.date, P.imageUrl,
U.username, U.permission, U.image,
COALECE(L.totalLikes, 0) AS totalLikes
FROM posts AS P
INNER JOIN user AS U ON U.id = P.userId -- change to LEFT JOIN if the column userId in posts is nullable
LEFT JOIN (
SELECT postId, COUNT(*) AS totalLikes
FROM likes
GROUP BY postId
) AS L ON L.postId = P.id
ORDER BY P.id DESC;
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/467579.html
下一篇:無法過濾過去30天的SQL資料
