2012-02-26 16 views
4

次のコードは、ランダムなデータベースイメージと1つの特定のイメージ(私が欲しいものです)を表示します。イメージID 11が常に最初に表示されるため、データベースクエリ後にこれらの結果をシャッフルするにはどうすればよいですか?画像ID 11をランダムに表示したい。シャッフルランダム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)); シャッフル($ get_photo); FYI:200k以上の結果がある場合は、mysql dbでrand()を使用しないでください。アプリケーションが遅くなります。 – insomiac

+0

@Aby彼は 'LIMIT 7 'を手に入れているので、遅くなるのではないかと疑う。 –

+0

私を訂正してくれてありがとう。これを追加する必要があります。クエリが "order by rand()" – insomiac

答えて

5

で休息を照会ID 11とし、よりイメージを選択します。

$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

まず彼らは、PHPに取得された後、あなたがそれらをシャッフルすることができUNIONキーワード

SELECT * 
FROM Images 
Where ID = 11 
UNION 
SELECT * 
FROM Images 
WHERE ID != 11 
4
  1. まずランダムで収集組合他6枚の画像、特定の画像を選択します。
  2. rand()で何かをソートすると、すべての行が一意のランダム値を取得してソートされるので、サブグループはソートされません。したがって、order by節でより多くの列を使用すると、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がリソースであることを期待しています。 ?> – user1022772

+0

MySQL_error()の出力は何ですか? –

+0

警告:mysql_fetch_array()は、パラメータ1がリソースであることを期待しています。....ブール型で指定された行27. – user1022772

2

そのdoesntのはあなただけ例えば

SELECT * FROM tbl_table ORDER BY RAND() 

を置けば、複雑なこれはあなたのデータをランダム化することをする必要があります参照してください。表示する画像の数を制限する場合は、次のように入力します。

SELECT * FROM tbl_table ORDER BY RAND() LIMIT 6