用户
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查询?
答案 0 :(得分:2)
您好可以尝试基于两个表的并集编写单个查询,例如
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
属于单列报表。