Choix aleatoire mysql
21 messages
• Page 1 sur 2 • 1, 2
-

yazerty - WRInaute passionné

- Messages: 1682
- Inscription: 19 Juin 2005
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é
.
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.
-

bertimus - WRInaute passionné

- Messages: 2228
- Inscription: 24 Aoû 2005
Tu peux tenter ça :
Vu ici : http://www.webrankinfo.com/forums/topic ... 130_15.htm
$sql = mysql_query("select * from table order by md5(rand()) limit 1");
Vu ici : http://www.webrankinfo.com/forums/topic ... 130_15.htm
- boutdepapier
- WRInaute discret

- Messages: 163
- Inscription: 4 Aoû 2006
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";
$sql = "SELECT id, nom, chapo FROM fiche WHERE activite_actrice=1 ORDER BY rand() LIMIT 1";
Et ça marche trés bien
$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

- Messages: 18812
- Inscription: 8 Aoû 2004
non, là ça trie par ordre aléatoire et ensuite ça en choisit les 20 derniers.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";
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
-

biscuit - WRInaute impliqué

- Messages: 519
- Inscription: 5 Juin 2006
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é) :
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

- Messages: 18812
- Inscription: 8 Aoû 2004
biscuit a écrit:qui dit en passant est la même que la mienne...
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 sqlbiscuit 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...
-

hm19000 - WRInaute occasionnel

- Messages: 492
- Inscription: 2 Oct 2005
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 impliqué

- Messages: 519
- Inscription: 5 Juin 2006
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.
-

Leonick - WRInaute accro

- Messages: 18812
- Inscription: 8 Aoû 2004
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.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 ?
21 messages
• Page 1 sur 2 • 1, 2
Lectures recommandées sur ce thème :
- génération d'ID aléatoire en PHP ou MySQL
- [MySQL] tirage aléatoire via ORDER BY rand()
- Tirage aléatoire dans une table MySQL (solutions et questions)
- [Sondage] Expliquez votre choix MySQL ou PostgreSQL
- Choix d' index pour une table mysql
- Question MySQL, choix TEXT ou VARCHAR et autre ? sur l'UTF-8
- Mysql : choix des types pour les champs entre :
- Choix du titre - choix d'url - redirection
- Gestion des langues et des sessions en PHP / MySQL - 02-05-2004
- Passage à l'heure d'été/hiver sur un forum phpBB - 31-10-2010
- Script de mise en cache des pages (PHP MySQL) - 09-08-2010
- GoogleStats : analyse temps réel des visites de Google sur votre site - 02-10-2002
- Sortie officielle de GoogleStats v2.0 ! - 23-02-2003
- Les différents systèmes de mise en cache des données - 16-08-2010
- AdSense Tracking : statistiques détaillées sur les clics AdSense - 29-02-2004
- Yahoo déclare-t-il la guerre aux référenceurs ? - 26-01-2006
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

