[英]Combining two select queries into one efficiently
用戶
id | name
1 | A
2 | B
文章
id | title | descritption
1 | wx | xyz
2 | yz | abc
article_rating
article_id(article->id) | given_by(user->id) | given_rating
1 2 4
2 1 3
保存的文章
article_id(article->id) | saved_by(user->id)
1 2
我要根據用戶是否對文章進行評分/保存來更改一些按鈕和圖標。 我為此使用兩個選擇查詢:
額定與否
SELECT given_rating as rating
FROM article_rating
WHERE given_by=? AND article_id=?
是否保存
SELECT saved_by as saved
FROM saved_article
WHERE saved_by=? AND article_id=?
所以我的問題是如何將兩者有效地組合成一個mysql查詢?
好吧,您可以嘗試根據兩個表的並集編寫單個查詢,例如
SELECT val, source
FROM
(
SELECT NULL AS saved_by, given_by, given_rating AS val, 'given_rating' AS source
FROM article_rating
UNION ALL
SELECT NULL, NULL AS given_by, saved_by, 'saved_by'
FROM saved_article
) t
WHERE
(source = 'given_rating' AND given_by = ? AND article_id = ?) OR
(source = 'saved_by' AND (saved_by = ? OR saved_by IS NULL) AND article_id = ?);
我在這里使用了一個常見的技巧,該技巧是將計算的列source
引入到聯合查詢中。 然后,在WHERE
子句中,我們可以引用它來決定需要應用哪些限制。
上面的查詢是否有意義還取決於幾件事,最重要的是, given_rating
和saved_by
一起屬於一個列報告。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.