MySql заказ с объединением дубликатов результатов - PullRequest
0 голосов
/ 31 декабря 2011

Вот мой запрос

(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

Теперь моя проблема в том, что я получаю повторяющиеся результаты.Есть ли способ изменить это, чтобы я не получал дубликаты.

Порядок выбора более важен, чем взлеты или падения.

Я также хотел бы отметить, чтоколичество изменений выбранных операторов.

Ответы [ 2 ]

1 голос
/ 31 декабря 2011
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
0 голосов
/ 31 декабря 2011

Вы, очевидно, получите дублированные результаты, потому что вы добавляете значение литерального числа после SELECT *.

Это сделает каждую строку отдельной, поэтому UNION не сможет удалить дублирующиеся строки, в противном случае.

...