2 回答

TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超1個(gè)贊
SUM使用and似乎是一個(gè)非常簡(jiǎn)單的查詢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'另一個(gè)status = 'pending'單獨(dú)的計(jì)數(shù)相加。
當(dāng)您要查找的記錄沒有匹配記錄時(shí),這些COALESCE功能可以滿足您的需求。user_id如果不使用它們,結(jié)果將null不是0。

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超5個(gè)贊
對(duì)于填充每個(gè)頁面的問題的第一部分,您可以通過在包含兩個(gè)表的內(nèi)部聯(lián)接上使用“SELECT * FROM”從 POSTS 檢索 ID 并從 COMMENTS 檢索 ID。在這種情況下,將返回 POSTS 和 COMMENTS 中具有相同名稱(id、img)的列,并且結(jié)果將不明確,即在 PHP 代碼中,當(dāng)您請(qǐng)求 $row->id 時(shí),它是 POSTS.ID 還是評(píng)論.ID?
您需要 COMMENTS.ID 來更新 COMMENTS 中的狀態(tài)。您可以將“COMMENTS.ID 重命名為 COMMENT_ID”,或者僅從 COMMENTS 中進(jìn)行選擇,因?yàn)槟婪祷氐摹癐D”將是 COMMENT.ID
由于您只需要結(jié)果中來自 COMMENTS 的行,因此我只會(huì)從 COMMENTS 中進(jìn)行選擇,并使用子查詢通過 POSTS 而不是聯(lián)接來約束它,并且還進(jìn)一步將 SELECT 限制為您的結(jié)果明確需要的列列表,以便您不必為返回不需要的列付費(fèi),例如
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 )
有用的索引:
對(duì) STATUS、PAGE_ID 的評(píng)論
USER_ID 上的帖子
假設(shè):
COMMENTS.PAGE_ID --> POSTS.ID 外鍵依賴。
POSTS.ID 和 COMMENTS.ID 是唯一的。
您不會(huì)返回太多需要分頁的行...限制查詢需要不同的方法。
- 2 回答
- 0 關(guān)注
- 159 瀏覽
添加回答
舉報(bào)