正如标题所示,我有一个像这样的MySQL查询:
SELECT DISTINCT `friendly_url` FROM `post` WHERE `description` LIKE ? OR `heading` LIKE ? ORDER BY `friendly_url`
我在参数中给出了字符串'%'外卡,以便它可以作为搜索功能使用。但是,假设用户正在搜索像“是”这样的常用词,并且它出现在同一帖子的标题和说明中。然后此查询返回两次相同的帖子。我不希望这种情况发生,因此'DISTINCT'。
为什么会这样?我可以用任何方式让它按照我想要的方式工作吗?
答案 0 :(得分:2)
查询未返回同一行两次。 WHERE
子句中的谓词针对每一行进行评估,并且返回该行,或者不返回该行。 OR
条件的组合不会导致MySQL返回"同一行"多次。
如果您获得friendly_url
的重复值,则post
表中的多行具有friendly_url
的相同值。 (即friendly_url
列中post
列不唯一。)
您不必使用DISTINCT
关键字从结果集中删除重复项。您可以删除DISTINCT
关键字,并在GROUP BY friendly_url
子句之前添加ORDER BY
。
识别"重复的"值friendly_url
,以及有多少行具有相同的值:
SELECT p.friendly_url
, COUNT(1)
FROM post p
GROUP BY p.friendly_url
HAVING COUNT(1) > 1