Choix aleatoire mysql

Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics


hm19000
WRInaute impliqué
WRInaute impliqué
 
Messages: 492
Inscription: Dim Oct 02, 2005 20:24

Choix aleatoire mysql

Message le Mer Sep 12, 2007 1:25

Bonjour,

Comment choisir aleatoirement 6 enrengisterment parmis les 20 derniers enrengistremement.

SELECT id FROM AAAA ORDER BY RAND() LIMIT 6 c'est ce que j'ai trouvé.


Merci pour votre aide.


yazerty
WRInaute accro
WRInaute accro
 
Messages: 1682
Inscription: Dim Juin 19, 2005 19:47

Message le Mer Sep 12, 2007 3:40

Je ne comprends pas : si tu as trouvé pourquoi poses-tu la question :- ?

Edit : ah ok pardon je n'avais pas compris l'histoire des 20 derniers enregistrements désolé ;).
Dernière édition par yazerty le Mer Sep 12, 2007 7:09, édité 1 fois.


biscuit
WRInaute passionné
WRInaute passionné
 
Messages: 519
Inscription: Lun Juin 05, 2006 10:37

Message le Mer Sep 12, 2007 6:47

Quelque chose dans le genre ... sait pas si ça fonctionne:

SELECT id FROM table WHERE id IN (SELECT id FROM table ORDER BY id DESC LIMIT 20) ORDER BY RAND() LIMIT 6


hm19000
WRInaute impliqué
WRInaute impliqué
 
Messages: 492
Inscription: Dim Oct 02, 2005 20:24

Message le Mer Sep 12, 2007 14:15

sa n'as pas marché, est que qlq 'un peut m'aider


bertimus
WRInaute accro
WRInaute accro
 
Messages: 2227
Inscription: Mer Aoû 24, 2005 11:51

Message le Mer Sep 12, 2007 16:11

Tu peux tenter ça :
$sql = mysql_query("select * from table order by md5(rand()) limit 1");


Vu ici : http://www.webrankinfo.com/forums/topic ... 130_15.htm


Leonick
WRInaute accro
WRInaute accro
 
Messages: 12381
Inscription: Dim Aoû 08, 2004 20:24

Message le Mer Sep 12, 2007 16:34

sauf que son problème est de les sélectionner dans les 20 derniers.

boutdepapier
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 163
Inscription: Ven Aoû 04, 2006 16:32

Message le Mer Sep 12, 2007 16:45

Perso je fais :
$sql = "SELECT id, nom, chapo FROM fiche WHERE activite_actrice=1 ORDER BY rand() LIMIT 1";

Et ça marche trés bien ;) Si tu veux faire un random sur les deux derniers il faut jouer sur le limit :

$sql = "SELECT id, nom, chapo FROM fiche WHERE activite_actrice=1 ORDER BY rand() LIMIT (Le nombre total d'enreistrement total - 20),1";


Leonick
WRInaute accro
WRInaute accro
 
Messages: 12381
Inscription: Dim Aoû 08, 2004 20:24

Message le Mer Sep 12, 2007 17:02

boutdepapier a écrit:$sql = "SELECT id, nom, chapo FROM fiche WHERE activite_actrice=1 ORDER BY rand() LIMIT (Le nombre total d'enreistrement total - 20),1";
non, là ça trie par ordre aléatoire et ensuite ça en choisit les 20 derniers.
Alors que ce qu'il veut, c'est en prendre 5 au hasard dans les 20 derniers. En fait, il faudrait quelque chose comme ça
Code: Tout sélectionner
SELECT * FROM matable where id in (select id FROM matable  order by id desc limit 10)
order by rand() limit 0,5
mais avec ma version de mysql, le limit du (select...) ne passe pas. Erreur :cry:


hm19000
WRInaute impliqué
WRInaute impliqué
 
Messages: 492
Inscription: Dim Oct 02, 2005 20:24

Message le Mer Sep 12, 2007 18:20

Toujours rien, je ne sais pas pourquoi ca passe pas.

Pourtant la solution de Leonick me parait juste. :cry:


biscuit
WRInaute passionné
WRInaute passionné
 
Messages: 519
Inscription: Lun Juin 05, 2006 10:37

Message le Mer Sep 12, 2007 18:27

qui dit en passant est la même que la mienne...

Sinon tu fais un tableau multidimensions avec les 20 résultats de ta requête, tu mélange le tout aléatoirement, et tu prends les 6 premiers...

-edit:

un truc comme ça (pas testé) :
Code: Tout sélectionner
   $i = 0;
   while ($row = mysql_fetch_assoc($sql)) {
      $row[$i]['champs1'] = $row['champs1'];      
      $row[$i]['champs2'] = $row['champs2'];
      $row[$i++]['champs3'] = $row['champs3'];
   }
   mysql_free_result($sql);
   
   shuffle($row);
   
   for ($i=0;$i<6;$i++) {
      print $row[$i]['champs1'];      
      print $row[$i]['champs2'];      
      print $row[$i]['champs3'];
   }


Leonick
WRInaute accro
WRInaute accro
 
Messages: 12381
Inscription: Dim Aoû 08, 2004 20:24

Message le Mer Sep 12, 2007 21:24

biscuit a écrit:qui dit en passant est la même que la mienne...
:oops: ben oui, même pas fait gaffe.
biscuit a écrit:Sinon tu fais un tableau multidimensions avec les 20 résultats de ta requête, tu mélange le tout aléatoirement, et tu prends les 6 premiers...
Ca marche, car c'est ce que je fais dans ces cas là, mais ça m'aurais bien arrangé aussi d'avoir une solution directe en sql :cry:


hm19000
WRInaute impliqué
WRInaute impliqué
 
Messages: 492
Inscription: Dim Oct 02, 2005 20:24

Message le Mer Sep 12, 2007 22:40

Ca serai pas trop lourd pour le serveur ?

biscuit a écrit:qui dit en passant est la même que la mienne...

Sinon tu fais un tableau multidimensions avec les 20 résultats de ta requête, tu mélange le tout aléatoirement, et tu prends les 6 premiers...

-edit:

un truc comme ça (pas testé) :
Code: Tout sélectionner
   $i = 0;
   while ($row = mysql_fetch_assoc($sql)) {
      $row[$i]['champs1'] = $row['champs1'];      
      $row[$i]['champs2'] = $row['champs2'];
      $row[$i++]['champs3'] = $row['champs3'];
   }
   mysql_free_result($sql);
   
   shuffle($row);
   
   for ($i=0;$i<6;$i++) {
      print $row[$i]['champs1'];      
      print $row[$i]['champs2'];      
      print $row[$i]['champs3'];
   }


biscuit
WRInaute passionné
WRInaute passionné
 
Messages: 519
Inscription: Lun Juin 05, 2006 10:37

Message le Jeu Sep 13, 2007 6:17

C'est peut-être pas super optimisé (quoique, je vois pas comment faire d'autre, si qq a une astuce je suis aussi preneur)... mais ça reste une toute petite boucle, je doute que cela soit ne serait-ce que visible sur les performance de ton serveur... J'utilise un peu près cette méthode pour faire une sorte de cache des requêtes sql pour lesquels je dois sortir des valeurs plusieurs fois sur la même page.


DrDroopy
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 244
Inscription: Lun Nov 28, 2005 16:56

Message le Jeu Sep 13, 2007 7:57

Lorsque l'on fait un SELECT "par defaut", sans indications supplémentaires, les données sont classées des plus anciennes aux plus récentes ?


Leonick
WRInaute accro
WRInaute accro
 
Messages: 12381
Inscription: Dim Aoû 08, 2004 20:24

Message le Jeu Sep 13, 2007 8:42

DrDroopy a écrit:Lorsque l'on fait un SELECT "par defaut", sans indications supplémentaires, les données sont classées des plus anciennes aux plus récentes ?
presque, car quand on supprime un enregistrement, le suivant va prendre la place libérée. Sauf si on compacte la base, mais bon, on ne le fait pas à chaque suppression.

Choix aleatoire mysql

Formation recommandée sur ce thème :

Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités