【问题标题】:MySql order by with union duplicate resultsMySql order by 与联合重复结果
【发布时间】:2012-01-30 21:44:57
【问题描述】:

这是我的查询

(SELECT *, 1 as ob FROM `jokes` WHERE `flags` < 5 AND (`title` LIKE "%only three doors%" OR `joke` LIKE "%only three doors%") )
UNION
(SELECT *, 2 as ob FROM `jokes` WHERE `flags` < 5 AND (`title` LIKE "%only%" OR `joke` LIKE "%only%") )
UNION
(SELECT *, 3 as ob FROM `jokes` WHERE `flags` < 5 AND (`title` LIKE "%three%" OR `joke` LIKE "%three%") )
UNION
(SELECT *, 4 as ob FROM `jokes` WHERE `flags` < 5 AND (`title` LIKE "%doors%" OR `joke` LIKE "%doors%"))
 ORDER BY `ob` ASC, `ups` DESC,`downs` ASC LIMIT 0, 30

现在我的问题是我得到了重复的结果。有没有办法修改它,所以我不会得到重复。

选择的顺序比上升或下降更重要。

我还想指出,select 语句的数量发生了变化。

【问题讨论】:

    标签: mysql select sql-order-by union


    【解决方案1】:
    SELECT jokes.*
         , CASE WHEN title LIKE '%only three doors%' 
                  OR joke LIKE '%only three doors%'
                  THEN 1 
                WHEN title LIKE '%only%' 
                  OR joke LIKE '%only%'
                  THEN 2
                WHEN title LIKE '%three%' 
                  OR joke LIKE '%three%'
                  THEN 3
                ELSE 4
           END as ob 
    FROM jokes 
    WHERE flags < 5 
      AND ( title LIKE '%only%' 
         OR joke LIKE '%only%'
         OR title LIKE '%three%' 
         OR joke LIKE '%three%'
         OR title LIKE '%doors%' 
         OR joke LIKE '%doors%'
          )
    ORDER BY ob ASC
           , ups DESC
           , downs ASC 
    LIMIT 0, 30
    

    【讨论】:

    • 在标志条件之后的部分看起来还不错。这还有必要吗?
    • 另外,如果它不满足案例中的任何一个条件,我不想要它。因此,拥有 else 4 语句只会抓取其余的行,不是吗,并将它们添加到末尾?我可以把那条线去掉吗?
    • ELSE 4 适用于title LIKE '%doors%' or joke LIKE '%doors%' 时的情况
    • WHERE中的部分,需要flags &lt; 5之后的部分,是的。
    • 似乎工作得很好。将 ELSE 4 更改为另一个 WHEN 条件。
    【解决方案2】:

    您显然会得到重复的结果,因为您在 SELECT * 之后添加了文字数字值。

    这将使每一行都不同,因此UNION 将无法删除其他重复的行。

    【讨论】:

    • 这一切我都知道。我在问是否有人知道如何在不重复的情况下完成这项工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-13
    • 1970-01-01
    • 1970-01-01
    • 2013-09-20
    • 1970-01-01
    • 2011-12-20
    • 1970-01-01
    相关资源
    最近更新 更多