簡體   English   中英

有效地將兩個選擇查詢組合為一個

[英]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_ratingsaved_by一起屬於一個列報告。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM