2 回答

TA貢獻1780條經驗 獲得超1個贊
SUM使用and似乎是一個非常簡單的查詢CASE
SELECT
COALESCE(SUM(CASE WHEN c.status = 'approved' THEN 1 ELSE 0 END), 0) AS approvedCount,
COALESCE(SUM(CASE WHEN c.status = 'pending' THEN 1 ELSE 0 END), 0) AS pendingCount
FROM comments c
INNER JOIN posts p
ON c.page_id = p.id
WHERE p.user_id = :user_id
該查詢的主要作用是將所有行comments與status = 'approved'另一個status = 'pending'單獨的計數相加。
當您要查找的記錄沒有匹配記錄時,這些COALESCE功能可以滿足您的需求。user_id如果不使用它們,結果將null不是0。

TA貢獻1876條經驗 獲得超5個贊
對于填充每個頁面的問題的第一部分,您可以通過在包含兩個表的內部聯接上使用“SELECT * FROM”從 POSTS 檢索 ID 并從 COMMENTS 檢索 ID。在這種情況下,將返回 POSTS 和 COMMENTS 中具有相同名稱(id、img)的列,并且結果將不明確,即在 PHP 代碼中,當您請求 $row->id 時,它是 POSTS.ID 還是評論.ID?
您需要 COMMENTS.ID 來更新 COMMENTS 中的狀態。您可以將“COMMENTS.ID 重命名為 COMMENT_ID”,或者僅從 COMMENTS 中進行選擇,因為您知道返回的“ID”將是 COMMENT.ID
由于您只需要結果中來自 COMMENTS 的行,因此我只會從 COMMENTS 中進行選擇,并使用子查詢通過 POSTS 而不是聯接來約束它,并且還進一步將 SELECT 限制為您的結果明確需要的列列表,以便您不必為返回不需要的列付費,例如
SELECT C.ID, C.NAME, C.CONTENT, C.VOTES C.STATUS /* but you know that STATUS already, heheh */
FROM COMMENTS C WHERE
C.STATUS = :STATUS AND
C.PAGE_ID IN ( SELECT P.ID FROM POSTS P WHERE P.USER_ID = :USER )
有用的索引:
對 STATUS、PAGE_ID 的評論
USER_ID 上的帖子
假設:
COMMENTS.PAGE_ID --> POSTS.ID 外鍵依賴。
POSTS.ID 和 COMMENTS.ID 是唯一的。
您不會返回太多需要分頁的行...限制查詢需要不同的方法。
- 2 回答
- 0 關注
- 166 瀏覽
添加回答
舉報