Mam prostą tabelkę:
CREATE TABLE `dev_a4a`.`test` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT , `type` VARCHAR(45) NOT NULL , `priority` INT NOT NULL , PRIMARY KEY (`id`) );
i takie rekordy:
id|type |priority 1 |long |8 2 |long |3 3 |short|9 4 |short|1
Chce posortować rekordy po wyrażeniu warunkowym. Jeśli typ rekordu to 'short' wartość do sortowania to 2, jeśli nie to wartość wyliczana jest na podstawie kolumny priority z użyciem RAND():
SELECT (RAND() * priority) AS prio, type, priority FROM test ORDER BY (IF(type = 'short', '2', prio)) DESC, id DESC
Jako rezultat dostaję różne wyniki (w końcu jest RAND()), ale są one w większości niepoprawne. Jeden z rezultatów, które dostałem:
prio | type | priority '0.05013570194145264', 'long', '8' '2.9015473750434326', 'long', '3' '0.320064320527077', 'short', '1' '7.598900996706356', 'short', '9'
Co powinienem dostać:
prio | type | priority '2.9015473750434326', 'long', '3' <- ORDER BY prio '7.598900996706356', 'short', '9' <- ORDER BY 2 '0.320064320527077', 'short', '1' <- ORDER BY 2 '0.05013570194145264', 'long', '8' <- ORDER BY prio
Co robię źle?