2013-06-15 6 views
1

У меня есть база данных с оцененными элементами в ней. Когда я хочу, чтобы отобразить все элементы из определенной категории и сортировать результаты по скорости, чем по количеству подобных, это легко, и это работает:Mysql: случайный сортировать, чем сортировать по определенному столбцу

$query = "SELECT * FROM infos WHERE category = '".$categories."'"; 
$query .= "ORDER BY `rate` DESC, `like` DESC"; 

Проблема заключается в том, когда результаты имеют одинаковое значение, они показывают в алфавитном порядке. Итак, я хотел бы рандомизировать базу данных, прежде чем сортировать ее по курсу и т.п. Я просто хочу, чтобы тот же шанс на все предметы и те, которые имеют одинаковое значение, не должны быть благоприятными в алфавитном порядке.

Я попытался это, но он не работает:

$query = "SELECT * FROM infos WHERE category = '".$categories."'"; 
$query .= "ORDER BY RAND(), ORDER BY `rate` DESC, `like` DESC"; 

Может кто-нибудь мне помочь? Я застрял.

+0

Что не получилось? Каков был результат вашего запроса? – zeantsoi

+1

@zeantsoi Это приводит к ошибке синтаксиса MySQL - это должно было быть обнаружено и сообщено. – user2246674

+0

Обязательно выполните 1) тестовые запросы в CLI или «SQL Studio»; 2) корректно обрабатывать ошибки в SQL-запросах с PHP; и 3) использовать заполнители/подготовленные заявления. – user2246674

ответ

4

Вы должны повернуть его:

SELECT * FROM infos WHERE category=... 
ORDER BY rate DESC, like DESC, RAND(); 

Таким образом, он сортирует по скорости, то нравится и, наконец, случайным образом, если скорость и как равны.

Также ваш оригинальный ORDER BY с RAND() не работает, потому что вы используете два предложения ORDER BY.

+1

Спасибо, он работает! Во-первых, я попытался удалить один из ORDER BY, но он рандомизировал все мои результаты. Если я поместил RAND() в конце моего запроса, он работает как шарм! – pmrotule

+0

Добро пожаловать, рад, что он работает. – Ruben

Смежные вопросы