MySQL - 使用一个查询从3个表中搜索

时间:2015-01-12 11:58:06

标签: mysql

我有3张桌子

表新闻:

id_post | news      | id_user
3       | IT news   | 1 
4       | game news | 2

表用户:

id_user | username
   1    | bocah
   2    | gundul

和表投票

id_vote | id_post | id_user | LIKE
10      | 3       | 2       | 1

这是我的SQL查询:

SELECT post.*, username, like, SUM(vote.like) AS like FROM  post 
INNER JOIN user ON post.id_user=user.id_user 
INNER JOIN vote ON post.id_post=vote.id_post 
WHERE 
(`title` LIKE '%$word%' OR `username` LIKE '%$word%') AND post.id_user=user.id 
LIMIT 15

我只想根据关键字搜索postuser来创建搜索表单。然后显示帖子,用户的用户名,也是该帖子的作者和该新闻中的总数。

问题是当关键字与任何帖子或任何用户不匹配时,我的期望是,它应该返回一个空行。但事实并非如此,它返回1行,具有NULL值。

解决这个问题的答案是什么?

1 个答案:

答案 0 :(得分:0)

除了在没有匹配时获得一行之外,当有多个匹配时,您可能还会得到一行。我认为这是因为你有一个聚合(总和)而没有一个组。

如果我是正确的,添加group by子句应该可以解决问题:

SELECT post.*, username, like, SUM(vote.like) AS like FROM  post 
INNER JOIN user ON post.id_user=user.id_user 
INNER JOIN vote ON post.id_post=vote.id_post 
WHERE 
(`title` LIKE '%$word%' OR `username` LIKE '%$word%') AND post.id_user=user.id 
GROUP BY post.id /* Or what's its name */
LIMIT 15

然而,它将通过帖子返回结果,因此如果您搜索用户,您仍将获得所有帖子(即前15名),但我的猜测是,这正是您想要的。< / p>