Intereting Posts

перетасовать случайные результаты MYSQL

Следующий код отображает случайные изображения базы данных, а также одно конкретное изображение (это то, что я хочу). Как я могу перетасовать эти результаты после запроса базы данных, когда изображение ID 11 всегда отображается первым? Я хочу, чтобы изображение ID 11 отображалось случайно среди других.

Могу ли я использовать SHUFFLE (). Если да, то где именно я это ставлю сейчас?

Любая помощь будет оценена по мере изучения PHP

Благодарю.

<?php mysql_connect("", "", "") or die(mysql_error()) ; mysql_select_db("images") or die(mysql_error()) ; $photo=mysql_query("SELECT * FROM `profile_images` ORDER BY (ID = 11) DESC, RAND() LIMIT 7"); while($get_photo=mysql_fetch_array($photo)){ ?> <div style="width:300px;"> <img src="<? echo $get_photo['url']; ?>"> </div> <? } ?> 

Вы можете перетасовать их после их получения на php.

 $photos = array(); while ($get_photo = mysql_fetch_array($photo)) $photos[] = $get_photo; shuffle($photos); 

Или вы можете сделать это с помощью подзапросов:

 SELECT A.* FROM ( SELECT * FROM `profile_images` ORDER BY (ID = 11) DESC, RAND() LIMIT 7 ) as A ORDER BY RAND() 
  1. Сначала выберите конкретное изображение, затем объедините остальные 6 изображений, собранных случайным образом.
  2. Когда вы сортируете что-то по rand() все строки получают уникальное случайное значение для сортировки, поэтому подгруппы не сортируются . Поэтому использование большего количества столбцов в порядке по условию не работает, если присутствует rand() . Поэтому я использовал псевдоним результата и отсортировал его снова.

См. Запрос

 (SELECT * FROM `profile_images` WHERE id = 11 LIMIT 1) UNION (SELECT * FROM (SELECT * FROM `profile_images` WHERE id != 11 ORDER BY Rand() LIMIT 6) `t` ORDER BY id DESC) 

Его не нужно быть настолько сложным, если вы просто ставите, например

 SELECT * FROM tbl_table ORDER BY RAND() 

Это будет рандомизировать ваши данные. если вы хотите ограничить количество отображаемых изображений, тогда просто поставьте:

 SELECT * FROM tbl_table ORDER BY RAND() LIMIT 6 

Сначала выберите изображение с ID 11, а затем запросите остальные с ключевым словом UNION

 SELECT * FROM Images Where ID = 11 UNION SELECT * FROM Images WHERE ID != 11