0

私は使っている

$nameimg = mysql_query("SELECT * 
                        FROM images 
                        WHERE id='".$row['imgID']."' 
                        ORDER BY RAND()    
                        LIMIT 10");

上記のユーザーによるランダムな画像を表示しますが、ランダムな画像は表示されません。提出された時間で表示されているだけです。

4

2 に答える 2

0

PHP を使用して配列をランダムにシャッフルする必要があります。関心のあるフィールドが呼び出された場合url:

$req = mysql_query("SELECT url FROM images WHERE user_id = '{$row['userID']}'");
$images = array();
while($image = mysql_fetch_array($req)) {
    $images[] = $image['url'];
}
shuffle($images);
$tenImages = array_slice($images, 0, 10);

編集。また、準備済みステートメントに PDO を使用することを検討してください。

アップデート。一度に 10 枚の画像を選んでみませんか?

$images = array();
while(count($images) < 10) {
    $req = mysql_query("SELECT url FROM images WHERE user_id = '{$row['userID']}' LIMIT " . rand(1, 10000) . ", 1");
    $image = mysql_result($req, 0, 0);
    if(!in_array($image)) {
        $images[] = $image;
    }
}

より面白い(そしてより速い)方法。ここで提供されます。

$ids = array();
for($i = 0 ; $i < 1000 ; $i++) {
    $ids[] = rand(1, 10000);
}
$req = mysql_query("SELECT url FROM images WHERE user_id = '{$row['userID']}' AND id IN (" . implode(',', $ids) . ") LIMIT 10");
于 2012-08-06T22:21:02.820 に答える
0

WHEREID をチェックする条件は通常、結果セットを 1 行に減らすため、句全体ORDER BYが役に立たなくなります。

スキーマについて考え、クエリを再設計する必要があります。

于 2012-08-06T22:14:34.173 に答える