Page 1 sur 1

Une ligne au hasard dans un table

Posté : 30 avr. 2005, 23:29
par Invité
bonjour tout le monde,
je souhaite prendre un ligne au hazard dans une table et l'afficher

Code : Tout sélectionner

<?php $requete=mysql_query("SELECT * FROM ed_citations"); $nb_citation=mysql_num_rows($requete); $citation=rand(1, $nb_citation); $requete="SELECT * FROM ed_citations WHERE id='$citation'"; $temp=mysql_fetch_array( mysql_query($requete) ); echo '<b>'.$temp['nom']. '</b><br>' .$temp['citation']; ?>
dans ma table j'ai un id qui est incrémenté à chaque ajout. je prend un numéro au pif et en comparant avec id j'ai la ligne correspondante.
est ce réellement la meilleure solution ? ca fonctionne mais j'ai fais avec mes connaissance. j'aurai aimé savoir s'il y avait mieux ou plus judicieux.

merci et bonne continuation a tous

Posté : 30 avr. 2005, 23:36
par ioup
salut ! je suis pas un crack en php (enfin pas encore :p) mais j'aurais utiliser le rand() aussi :) je l'ai fait pour des fonds d'écran aléatoire ... :)

Posté : 01 mai 2005, 09:00
par Ripat
Il y a plus court, en une seule requête:

Code : Tout sélectionner

SELECT tes_col FROM ta_table ORDER BY RAND() LIMIT 1
Edit: Plus performant pour des grosses tables:

Code : Tout sélectionner

SELECT tes_col FROM ta_table WHERE RAND()<0.01 ORDER BY RAND() LIMIT 1
Avec ORDER BY RAND(), MySql affecte un nombre aléatoire à chaque ligne de la table. Ensuite il trie sur ces nombres et ce tri peut prendre du temps pour des grosses tables. La solution ci-dessus limite le tri sur un sous-ensemble plus restreint grâce au WHERE.