Mysql
 sql >> Database >  >> RDS >> Mysql

mysql order by with union non sembra funzionare

Da MySQL documentazione :

Fondamentalmente l'unica volta un ORDER in un sindacato sarà utile se stai usando LIMIT anche.

Quindi, se la query era così:

(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 ...

Quindi vedresti i primi dieci record che verrebbero restituiti in base a quell'ordine, ma non sarebbero necessariamente visualizzati in ordine.

AGGIORNAMENTO:

Prova questo -

(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