2011-06-23 3 views
1

J'ai une base de données SQL qui contient un champ. Je peux obtenir tous les éléments dans ce domaine par:SQL Résultat Random loop through

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

Je veux un élément aléatoire à imprimer à chaque fois que la page est ouverte/rafraîchi. Sachant que le résultat est un tableau contenant l'information que je veux, je veux choisir au hasard un élément du tableau. Aussi, s'il y a N éléments dans le tableau, je veux choisir tous les N éléments exactement une fois avant de montrer un élément pour la deuxième fois. Le processus se répète. Je sais coder quelque chose comme ça en java ou en python, mais je ne pense pas que ce soit comme ça que je devrais aller.

Je pense que je dois utiliser javascript, mais je ne suis pas sûr de la technologie à utiliser.

MISE À JOUR:

idée de Patrick semble être exactement ce que je cherchais. J'ai pensé que je partagerais ce que j'ai maintenant et peut-être que vous pouvez suggérer l'optimisation. J'espère que l'intention dans le code est évidente.

<? 
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

Je ne pense pas que cela impliquera Javascript! –

Répondre

1

Vous pouvez le faire sans Javascript, mais vous devez ouvrir/maintenir une session.

pseudocode:

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

Je ne sais rien sur les sessions. pouvez-vous me montrer de bonnes informations pour que je sache que je regarde les bonnes choses? – scifirocket

+0

Absolument. [Check this out] (http://www.php.net/manual/en/session.examples.basic.php), c'est le manuel PHP pour les sessions. Ils sont plutôt simples. –

+0

Pensez-vous qu'il existe une approche plus axée sur le serveur? Je ne veux pas vraiment créer de cookies, sauf si je dois le faire. – scifirocket

0

Si vous voulez un résultat aléatoire laisser les DBMS prendre soin d'elle. Ajoutez ceci au bas de votre requête sql.

ORDER BY RAND() 
LIMIT 1 
+0

cela fonctionnerait, mais j'ai une contrainte sur le nombre de fois qu'un résultat peut apparaître au hasard. tout doit apparaître au moins une fois avant de pouvoir apparaître à nouveau. Je parie que vous ne pouvez pas deviner quel type de contenu aurait besoin de ce type de structure! (Indice: c'est des publicités) – scifirocket