0

正如标题所示,我有一个这样的 MySQL 查询:

SELECT DISTINCT `friendly_url` FROM `post` WHERE `description` LIKE ? OR `heading` LIKE ? ORDER BY `friendly_url`

我在参数中给出了字符串 '%' 通配符,这样它就可以用作搜索功能。然而,假设用户正在搜索像“is”这样的常用词,并且它出现在同一篇文章的标题和描述中。然后这个查询两次返回同一个帖子。我不希望这种情况发生,因此是“DISTINCT”。

为什么会这样?我有什么办法可以让它按我想要的方式工作吗?

4

1 回答 1

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
于 2015-05-29T18:15:10.233 回答