3

注: 私は PHP の初心者なので、以下のコードは不適切かもしれません。

やあ。現時点では、このコードを使用して 9 つの一意のランダム行を選択していますが、正常に動作します。

$quCountRows = $database->query("SELECT * FROM approved")->rowCount();
$arrRandomPictures = array();
while (count($arrRandomPictures) < 9) {
    $randNumber = mt_rand(1, $quCountRows);
    if (!in_array($randNumber, $arrRandomPictures)) {
        $arrRandomPictures[] = $randNumber;
    }
}
$quRandomPicture1 = $database->query("SELECT picName,picType FROM approved WHERE id='".$arrRandomPictures[0]."'")->fetch(PDO::FETCH_ASSOC);
$quRandomPicture2 = $database->query("SELECT picName,picType FROM approved WHERE id='".$arrRandomPictures[1]."'")->fetch(PDO::FETCH_ASSOC);
$quRandomPicture3 = $database->query("SELECT picName,picType FROM approved WHERE id='".$arrRandomPictures[2]."'")->fetch(PDO::FETCH_ASSOC);
$quRandomPicture4 = $database->query("SELECT picName,picType FROM approved WHERE id='".$arrRandomPictures[3]."'")->fetch(PDO::FETCH_ASSOC);
$quRandomPicture5 = $database->query("SELECT picName,picType FROM approved WHERE id='".$arrRandomPictures[4]."'")->fetch(PDO::FETCH_ASSOC);
$quRandomPicture6 = $database->query("SELECT picName,picType FROM approved WHERE id='".$arrRandomPictures[5]."'")->fetch(PDO::FETCH_ASSOC);
$quRandomPicture7 = $database->query("SELECT picName,picType FROM approved WHERE id='".$arrRandomPictures[6]."'")->fetch(PDO::FETCH_ASSOC);
$quRandomPicture8 = $database->query("SELECT picName,picType FROM approved WHERE id='".$arrRandomPictures[7]."'")->fetch(PDO::FETCH_ASSOC);
$quRandomPicture9 = $database->query("SELECT picName,picType FROM approved WHERE id='".$arrRandomPictures[8]."'")->fetch(PDO::FETCH_ASSOC);

うまくいくかもしれませんが、より少ないクエリで同じ結果が得られると確信しています。これにより、ページの読み込みが速くなることが期待されます。

助言がありますか?


これがより良いコードです。アンバーに感謝!

$quCountRows = $database->query("SELECT * FROM approved")->rowCount();
$arrRandomPictures = array();
while (count($arrRandomPictures) < 9) {
    $randNumber = mt_rand(1, $quCountRows);
    if (!in_array($randNumber, $arrRandomPictures)) {
        $arrRandomPictures[] = $randNumber;
    }
}
$quRandomPicture = $database->query("SELECT picName,picType FROM approved WHERE id IN (".implode(', ', $arrRandomPictures).")")->fetchAll(PDO::FETCH_ASSOC);
4

2 に答える 2

3

inの代わりに使用し==て、ID のリストを渡します。そうすれば、9 回ではなく 1 回のクエリですべての結果を取得できます。

于 2012-08-11T21:39:56.773 に答える
1

乱数で注文して、毎回他の結果を得ることができます。このように、必要なクエリは 1 つだけです。

SELECT picName, picType FROM approved ORDER BY rand() LIMIT 0, 9;
于 2012-08-11T21:42:05.447 に答える