2012-02-26 4 views
4

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

Могу ли я использовать 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> 

<? } ?> 
+0

while ($ get_photo [] = mysql_fetch_array ($ photo)); shuffle ($ get_photo); FYI: Никогда не используйте rand() в mysql db, если у вас есть более 200k результатов. Это замедлит ваше приложение. – insomiac

+0

@ У него есть «LIMIT 7», поэтому я сомневаюсь, что он будет медленным. –

+0

благодарит меня за исправление. Необходимо добавить это. Если запрос связан с «order by rand()» – insomiac

ответ

5

Вы можете перетасовать их после того, как они получены в 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

Сначала выберите изображение с идентификатором 11 и чем запрашивать остальную с UNION ключевым словом

SELECT * 
FROM Images 
Where ID = 11 
UNION 
SELECT * 
FROM Images 
WHERE ID != 11 
4
  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) 
+0

Попробовали свой выборный запрос, но теперь я получаю ошибку. Предупреждение: mysql_fetch_array() ожидает, что параметр 1 будет ресурсом, boolean задан в ..., который является строкой 27-го цикла while: while ($ get_photo = mysql_fetch_array ($ photo)) { ?> – user1022772

+0

Что такое вывод MySQL_error()? –

+0

Предупреждение: mysql_fetch_array() ожидает, что параметр 1 будет ресурсом, boolean задан в строке .... 27. – user1022772

2

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

SELECT * FROM tbl_table ORDER BY RAND() 

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

SELECT * FROM tbl_table ORDER BY RAND() LIMIT 6 
Смежные вопросы