正如标题所示,我有一个这样的MySQL查询:
SELECT DISTINCT `friendly_url` FROM `post` WHERE `description` LIKE ? OR `heading` LIKE ? ORDER BY `friendly_url`
我在参数中给出了字符串'%'通配符,以便它作为搜索函数工作。然而,假设一个用户正在搜索一个常见的词,比如"is",它出现在同一篇文章的标题和描述中。然后该查询两次返回相同的帖子。我不希望这种情况发生,因此使用"DISTINCT"。
为什么会发生这种情况?有什么办法能让它按我想要的方式运作吗?
查询没有两次返回同一行。WHERE
子句中的谓词对每行求值,要么返回该行,要么不返回该行。任何OR
条件的组合都不会导致MySQL多次返回"同一行"。
如果您得到重复的friendly_url
值,那么您在post
表中有多个行具有相同的friendly_url
值。(即friendly_url
列在post
表中不是唯一的)
您不必使用DISTINCT
关键字从结果集中删除重复项。您可以删除DISTINCT
关键字,并在ORDER BY
子句之前添加GROUP BY friendly_url
。
识别friendly_url
的"重复"值,以及有多少行具有相同的值:
SELECT p.friendly_url
, COUNT(1)
FROM post p
GROUP BY p.friendly_url
HAVING COUNT(1) > 1