选择不同行当存在包含两列的逻辑或时



正如标题所示,我有一个这样的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

相关内容

  • 没有找到相关文章

最新更新