2

データベースから2つのランダムな行をフェッチするこのクエリがあります:

  $query  = "SELECT * FROM foo ORDER BY RAND() LIMIT 2";
  $result = mysql_query($query);

私が望むのは、選択した2つのアイテムを記憶して、次のページに再び表示できるようにすることです.RAND()情報で別のテーブルを更新することでこれを行うことができると思いましたが、私の人生ではどうすればよいかわかりませんそれを行う方法についての情報を見つけることもできません。

編集: 全体的なアイデアは、2 つの新しいアイテムと最後の 2 つのアイテムを表示することです。

編集2:

わかりましたので、SESSIONS を使用して実行する必要があるようです。これまでのところ、これを思いつきましたが、結果は以前のものではなく現在のアイテム情報です。

$item_array = array($item_id);
$_SESSION['lastitems'] = $item_array;

foreach($_SESSION['lastitems'] as $key=>$value) {
 echo $value . ' <br />';
}

問題は、$item_id実際に$row['itemid']はwhileループ内からのみ呼び出すことができるため、前に述べたようなSESSIONSは以前のものではなく現在のアイテム情報であり、以前のものを表示するにはどうすればよいのでしょうか?

編集 3:上記の foreach をループの外に貼り付けましたが、1 つのアイテムしか返されません

4

2 に答える 2

6

後続の 2 つのページで同じものを取得することはできません。これorder by rand()が、そもそも rand による順序付けの要点です。

次のページのデータを覚えておきたい場合は、出力を a に貼り付けて、$_SESSIONそこで参照するだけにしてはどうでしょうか。

そうは言っても、同じ結果が得られる行に沿って値を関数にシードすることができますが、それはワームの缶を開き、同じシードを他のページに渡し始める必要があります。おそらくaに保存する必要があるため、正方形になります。rand()order by rand(3)$_SESSION

編集: 2 つの新しい項目を追加する場合は、クエリをそのまま使用し、データを$_SESSION変数に挿入し続けます。そこに配列を格納できるので、魅力的に機能するはずです。データを引き出してセッションに追加し、セッションからのすべての結果を表示します。次のページで、2 つの新しい結果を取得し、セッションに追加して、セッションのすべての結果を表示します。

編集2:

まず、各ページでセッションを開始してください。

session_start();

$_SESSION配列を他の配列と同じように扱いたい場合:

$query  = "SELECT * FROM foo ORDER BY RAND() LIMIT 2";
$result = mysql_query($query);

出力する前に結果をどのように反復処理するかわからないので、適切と思われる方法で適用してください。

howeverYouLoopYouQueryResults
{
    $_SESSION['lastitems'][]=$rowFromYourResult;
    // This appends the row to the end of the array
}

さて、データを表示するようになったら、次の行に沿って何かを行うことができます:

foreach($_SESSION['lastitems'] as $key=>$value) {
    echo $value . ' <br />';
    // Keep in mind that it will be storing ALL the 
    // items from the row because you used 'select *'
    // You can see what you selected with:
    print_r($_SESSION['lastitems'];
}
于 2012-08-05T05:06:42.520 に答える
2

一般に、順序をランダム化してからその順序を使用する場合は、順序情報をテーブル内に保存するだけで実行できます。順序が変わるため、最初のクエリがめったに実行されないことを確認してください。2 番目のクエリは、以前に決定された順序に基づいてデータを取得するだけです。

最初のクエリは、ランダムな順序を列の 1 つに保存できます。

UPDATE `foo` SET `ordering`=RAND();

注文時に使用します。

SELECT * FROM `foo` ORDER BY `ordering`;
于 2012-08-05T05:08:41.417 に答える