2011-06-23 12 views
1

フィールドを含むSQLデータベースがあります。私はランダムな要素は、ページが/リフレッシュ開かれるたびにプリントアウトしたいSQLの結果ランダムループを介して

 $result=mysql_query($sql); 
     while($row=mysql_fetch_array($result)){ 
     $ftype =$row['ftype']; //name of field is 'ftype' 
     print $ftype} //do something 

:私がして、そのフィールド内のすべての要素を取得することができます。

結果が私が望む情報を含む配列であることを知っているので、配列の要素をランダムに選択したいと思います。また、配列にN個の要素がある場合、2回目の要素を再び表示する前に、N個の要素をすべて1回だけ選択します。プロセスはそれ自体を繰り返す。私はjavaやpythonでこれをコード化する方法を知っていますが、私はそれが私が行くべき方法だとは思わない。

私はjavascriptを使う必要があると思いますが、どの技術を使用するかはわかりません。

UPDATE:

パトリックのアイデアは、私が探していた正確に何のようです。私は今私が持っているものを分かち合うと思っていましたし、最適化を提案することもできます。コードの意図が明らかであることを願っています。

<? 
session_start(); 
if (!isset($_SESSION['count']) || !isset($_SESSION['randomArray'])) { 
     $count = 0; 
     $randomArray = array(); 
     $sql="SELECT youtubeurl FROM Foodlist"; 
     $result=mysql_query($sql); 
     while($row=mysql_fetch_array($result)){ 
      array_push($randomArray,$row['youtubeurl']); 
     } 
     shuffle($randomArray); 
     $_SESSION['randomArray'] = $randomArray; 
     $_SESSION['count'] = $count; 
} elseif ($_SESSION['count'] >= sizeof($_SESSION['randomArray'])){ 
    $_SESSION['count'] = 0; 
    $randomArray = $_SESSION['randomArray']; 
    shuffle($randomArray); 
    $_SESSION['randomArray'] = $randomArray; 
} else{ 
    $randomArray = $_SESSION['randomArray']; 
    $count = $_SESSION['count']; 
    echo $randomArray[$count]; 
    $_SESSION['count']++; 
} 
?> 
+0

私はこれがJavascriptを含むとは思わない! –

答えて

1

これはJavascriptを使用せずに行うことができますが、セッションを開いたり維持したりする必要があります。

擬似コード:

data = data_from_mysql() 

choice = random.choice(data, exclude = SESSION['choices']) 
SESSION['choices'].append(choice) 

print choice 

if len(SESSION['choices']) == len(data): 
    SESSION['choices'] = [] 
+0

私はセッションについて何も知らない。あなたは良い情報を私に指摘することができますので、私は正しいものを見ていますか? – scifirocket

+0

絶対に。 [これをチェックしてください](http://www.php.net/manual/en/session.examples.basic.php)、セッション用のPHPマニュアルです。彼らはかなり簡単です。 –

+0

これにはサーバ側のアプローチがあると思いますか?私がしなければ本当にクッキーを作りたくはありません。 – scifirocket

0

あなたはランダムな結果は、DBMSはそれの世話をさせたい場合。これをSQLクエリの一番下に追加します。

ORDER BY RAND() 
LIMIT 1 
+0

でも動作しますが、結果がランダムに出現する回数には制約があります。すべてが少なくとも1回は現れなければ表示されません。この種の構造が必要なコンテンツのタイプを推測することはできません。 (ヒント:広告です) – scifirocket