mysql order by with union doesn't seem to work

前端 未结 4 2097
一生所求
一生所求 2020-12-14 19:15

Here is my query

(SELECT * FROM `jokes` WHERE `flags` < 5 AND (`title` LIKE \"%only three doors%\" OR `joke` LIKE \"%only three doors%\") ORDER BY `ups`          


        
4条回答
  •  余生分开走
    2020-12-14 19:50

    From MySQL documentation:

    ... use of ORDER BY for individual SELECT statements implies nothing about the order in which the rows appear in the final result because UNION by default produces an unordered set of rows.

    Basically the only time an ORDER in a union will be useful is if you are using LIMIT as well.

    So if you query was like this:

    (SELECT * FROM `jokes` WHERE `flags` < 5 AND (`title` LIKE "%only three doors%" OR `joke` LIKE "%only three doors%") ORDER BY `ups` DESC,`downs` ASC LIMIT 10)
    UNION ...
    

    Then you would see the first ten records that would be returned based on that order, but they wouldn't necessarily be displayed in order.

    UPDATE:

    Try this -

    (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`, `ups` DESC,`downs` ASC LIMIT 0, 30
    

提交回复
热议问题