Следующий код отображает случайные изображения базы данных, а также одно конкретное изображение (это то, что я хочу). Как я могу перетасовать эти результаты после запроса базы данных, когда изображение 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()
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