4

テーブルの質問に保存したクイズを作成しています。1 つの質問が表示されるたびに、別の質問を表示したいと考えています。私は使用してみましたrand()

select * from quiz order by rand() LIMIT 1

しかし、行は繰り返されています。

ランダムな行を取得できるが、同じ質問を再度取得することなく、他に使用できるものはありますか?

4

4 に答える 4

2

セッションとクイズIDを使用できます。

例えば

select * from quiz order by rand() LIMIT 1

セッションクイズにクイズIDを追加します。

if(!$_SESSION['quiz']) { $_SESSION['quiz'] = array(); }
$_SESSION['quiz'][] = $row['id'];

NOT IN を呼び出します。

$session = implode(", ", $_SESSION['quiz']);
$query = "select * from quiz WHRE `id` NOT IN (".$session.") order by rand() LIMIT 1";
于 2012-10-02T07:09:19.337 に答える
1

以前に返された行を取得し、id将来のクエリから除外するだけです。

select * from quiz WHERE id NOT :previous_id order by rand() LIMIT 1
于 2012-10-02T07:06:34.910 に答える
1

ユーザーにランダムな順序ですべての質問を 1 回確認するように要求する場合は、ユーザーごとに個別の「プレイリスト」を追跡する必要があります。できればセッションを使用してください:

session_start();

if (!$_SESSION['ids']) {
    $_SESSION['ids'] = $db->getAllQuestionIdsFromTheDatabase();
                    // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                    // Leaving this up to you.

    shuffle($_SESSION['ids']);

    // $_SESSION['ids'] should now look like array(42, 12, 75, ...);
}

$question = $db->getQuestionById(array_shift($_SESSION['ids']));
...

ORDER BY RAND()を使用してデータベースで、または を使用して PHPでランダム化を行うことができます。どちらでも問題ありませんshuffle

于 2012-10-02T07:24:32.157 に答える
0

はい、すべての行 (またはそれらの一部) を選択して使用することができます。shuffle()主な理由ORDER BY RAND()は、実際にはリソースに優しくなく、実際にテーブルの各行を再クエリし、乱数 ID を割り当ててから結果を配信するためです。

于 2012-10-02T07:07:16.893 に答える