[SQL + PHP ] - Tirage aleatoire dans une db?

- Tirage aleatoire dans une db? [SQL + PHP ] - SQL/NoSQL - Programmation

Marsh Posté le 15-04-2002 à 21:18:47    

Bonjour ,  
je sais qu'il est possible de tirer des enregistrement aleatoire mais je trouve pas comment...  
en fait je voudrais tirer 4 enregistrement au hasard d'une table ... et il ne doivent pazs se suivre... comment faire ca en une requete? ou faut il un algo combiner a du php? merci

Reply

Marsh Posté le 15-04-2002 à 21:18:47   

Reply

Marsh Posté le 15-04-2002 à 21:43:13    

[:yoyoz]

Reply

Marsh Posté le 15-04-2002 à 22:24:58    

En SQL, je suis quasi certain que c'est impossible...  Maintenant, si t'as un champ qui s'incrémente tout seul (un entier différent pour chaque enregistrement quoi), t'as qu'à tirer un nombre au hasard en PHP (inférieur au nombre le plus grand enregistrer dans ta table), rechercher l'info correspondant au nombre (select * from table where num = $auhasard) et faire ça jusqu'à ce que trouves 4 enregistrements valides...

Reply

Marsh Posté le 15-04-2002 à 22:28:59    

oui c ce ke jai fait pour finir mais jai du couiller avec le LIMIT car les nombnres de la clef primaire 'id'  ne se suivent pas tjrs  
 
1
3
4
5
 
8
 
9
 
13
 
etc..  a+

Reply

Marsh Posté le 15-04-2002 à 22:32:55    

Bah, ils ne se suivent pas toujours car c'est un champ qui s'incrémente tout seul...  Donc, si tu ajoutes 23 éléments, et que tu effaces le 12iem, les autres gardent leur ID (c'est le concepte d'identifiant stable)...  donc en effet, ta table sera composée de 22 éléments donc l'ID max sera 23...  Fait donc d'abord une première requête pour trouvé l'id le plus grand, tire un nombre au hasard entre 1 et max, fait une recherche dans la base.  Si elle aboutit, c'est que l'élément est dans la table et donc qu'il vient d'être tiré au sort, si la requête ne renvoit rien, c'est que l'élément n'existe plus et donc, il faut recommencer...
 
Un autre solution consiste à utiliser un très mauvais SGBD incapable de donner une réponse correcte, mais la, bonne chance  :pt1cable:

Reply

Marsh Posté le 15-04-2002 à 22:36:31    

non ce que j'ai fait c'est que j'ai compter le nombre d'enregistrement
 
SELECT COUNT(id) ...
 
puis jai fait  SELECT champ1 FROM table LIMIT $rnd,1
 
pis grace a d'autre champ ke je change justement avec un update y a pas 2 fois le meme qui sort
 
je savais le faire mais j'esperait trouver une requete pour simplifier :)  
merci kan meme a+

Reply

Marsh Posté le 16-04-2002 à 00:24:42    

RAND(N)  
Returns a random floating-point value in the range 0 to 1.0. If an integer argument N is specified, it is used as the seed value:  
mysql> select RAND();
        -> 0.5925
mysql> select RAND(20);
        -> 0.1811
mysql> select RAND(20);
        -> 0.1811
mysql> select RAND();
        -> 0.2079
mysql> select RAND();
        -> 0.7888
 
You can't use a column with RAND() values in an ORDER BY clause, because ORDER BY would evaluate the column multiple times. In MySQL Version 3.23, you can, however, do: SELECT * FROM table_name ORDER BY RAND() This is useful to get a random sample of a set SELECT * FROM table1,table2 WHERE a=b AND c<d ORDER BY RAND() LIMIT 1000. Note that a RAND() in a WHERE clause will be re-evaluated every time the WHERE is executed.


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed