我很難想出如何解釋這個問題,所以我給你舉個例子。最好的mysql查詢選擇多個行,每個行需要從另一個表中的多個關聯行
比方說,一個用戶請求一個頁面,將顯示多個文章和多個評論爲每一篇文章。因此,您不僅需要選擇多篇文章記錄,而且每一條記錄都需要有多條評論記錄。
什麼是最優化的查詢來完成此操作?謝謝。
我很難想出如何解釋這個問題,所以我給你舉個例子。最好的mysql查詢選擇多個行,每個行需要從另一個表中的多個關聯行
比方說,一個用戶請求一個頁面,將顯示多個文章和多個評論爲每一篇文章。因此,您不僅需要選擇多篇文章記錄,而且每一條記錄都需要有多條評論記錄。
什麼是最優化的查詢來完成此操作?謝謝。
您想要使用INNER JOIN。
SELECT
article.*,
comment.*
FROM
article
INNER JOIN
comment
ON
comment.article_id = article.id
這會給你的冗餘數據(多行同一篇文章中的數據),但只有一個sql語句/到數據庫的連接。
這是沒有絕對的對或錯,join
將返回更大的數據集,但可以在一個查詢得到的一切
取決於你的需求,如果你只需要評論數+單註解的ID(供以後使用),考慮使用GROUP_CONCAT
select
article.*,
group_concat(comment.id) as comments,
count(comment.id) as comments_count
from
article
left join comment
on comment.article_id=article_id
group by article.id;
列的意見將包含所有評論的ID,併爲每篇文章的評論comments_count回數
PS:我覺得左加入更合適
雖然這是一個非常有用的函數,但如果我需要的不僅僅是Id或count(在我的情況中,我是這樣做的),那麼我只剩下連接選項了,對嗎? – Ryan 2011-01-11 07:28:49
啊,我明白了。我認爲冗餘數據的想法是什麼讓我失望,讓我覺得必須有另一種解決方案。我想從長遠來看,這不是一筆大交易。謝謝梅西! – Ryan 2011-01-11 06:49:55