提问者:小点点

PHP和MySQL使用内部联接,WHERE和OR子句(过滤重复项)来区分结果


我知道这个问题由来已久,但很难进行一个非常具体的搜索,而且情况可能仍有微小但关键的不同。 我正在尝试为我的论坛搜索脚本找出正确的mysql查询。 我需要的是列出主题和帖子包含匹配的字符串与单一查询,两者都必须提供各自的结果从另一个表(主题和帖子)。 在任何匹配的情况下,在主题名称应该只有一个帖子每个主题,这是非常第一个。 因此,我最初的疑问是:

SELECT topics.topic, posts.post 
FROM topics 
JOIN posts
ON 
posts.topic_id=topics.id 
WHERE topics.topic LIKE '%$search%'
OR posts.post LIKE '%$search%'

这将正确返回所有具有匹配字符串的帖子,但也会返回大量重复主题以及匹配主题所包含的大量无关帖子。 在这种情况下通常应该使用GROUP BY,但是在这里它不会有任何好处,因为按topics.topic或posts.post分组将相互不利。 我也看不出SELECT DISTINCT如何帮助任何一个,而且它似乎没有做任何事情,而且限制1在这里不能单独应用。 一如既往,我的最后手段是两个单独的查询,但如果一个单一的电话是可能的,我会非常高兴看到它。


共1个答案

匿名用户

请尝试以下操作:

SELECT t.topic as tpost, ppost = (SELECT post.post FROM posts p WHERE p.topic_id = t.id ORDER BY posts.id LIMIT 1)
FROM topics t 
where topics.topic LIKE 'xxx'
union 
SELECT t2.topic, p2.post 
FROM posts p2
JOIN topics t2 on p2.topic_id = t2.id
WHERE posts.post LIKE 'xxx'