我有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
我只想根据关键字搜索post
或user
来创建搜索表单。然后显示帖子,用户的用户名,也是该帖子的作者和该新闻中的总数。
问题是当关键字与任何帖子或任何用户不匹配时,我的期望是,它应该返回一个空行。但事实并非如此,它返回1行,具有NULL值。
解决这个问题的答案是什么?
答案 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>