2013-08-16 2 views
0

Я тяну список гостиниц из базы данных. Некоторые из них обновлены, что дает им право появляться в верхней части списка. В настоящее время модернизированы шоу в возрастающем порядке следует обычным, используя следующий:mysql RAND() Следующее по убыванию

SELECT Company FROM bandb Where BusinessState = '$State' AND BusinessCity = '$City' AND (Active = 'Web' OR Active = 'Name') ORDER by featured asc, Company asc 

мне нужно изменить его так, модернизированные постоялые дворы появляются в случайном порядке с последующим остальной трактиры в порядке возрастания, но я озадачен. Есть идеи?

+0

Я действительно очень надеюсь, что эти интерполированные значения [правильно экранированы] (http://bobby-tables.com/). – tadman

+0

У меня есть функция, которая очищает их до – user2689989

+0

Проблема с «функциями, которые их очищают» - это обычно неправильно. SQL-экранирование должно быть явным и ослепительно очевидным. – tadman

ответ

4

Попробуйте

SELECT Company, IF(featured, rand(), 0) AS rand_position 
FROM bandb 
Where BusinessState = '$State' AND BusinessCity = '$City' AND (Active = 'Web' OR Active = 'Name') 
ORDER by featured asc, rand_position DESC, Company asc 

Если компании «признаки», случайное число генерируется для своей позиции, в противном случае они получают 0. Затем вы сортируете это случайное поле. Непредвиденные компании оказываются внизу, а признанные - упорядочены по этому случайному числу.

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