[SQL] Récupérer un champ aléatoire - Version imprimable +- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org) +-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38) +--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51) +--- Sujet : [SQL] Récupérer un champ aléatoire (/showthread.php?tid=3408) |
[SQL] Récupérer un champ aléatoire - Faelnor - 09-12-2008 Bonjour, Je m'explique, en fait je cherche à créer une table avec le nom de toutes les villes, j'aimerais qu'à l'inscription il y ai une requête faîte à la base de données qui prendrait une des villes au hasard mais je ne vois pas du tout comment le faire. Merci d'avance. RE: recuperer un Champ de base de donnees au hasard - Seren - 09-12-2008 Tu peux regarder la discussion en bas de cette page qui parle de "Random". http://dev.mysql.com/doc/refman/5.0/en/select.html C'est des solutions 100% MySQL. Alternativement, tu peux générer un id alétaoirement avec une fonction php : http://de3.php.net/manual/fr/function.mt-rand.php Et le chercher dans la table. (Attention il faut probablement générer un nombre aléatoire entre 1, et ton nombre maximum de ville.) RE: recuperer un Champ de base de donnees au hasard - Sephi-Chan - 09-12-2008 Bonjour, Voilà une requête qui devrait te convenir : Code : SELECT * FROM villes ORDER BY RAND() LIMIT 1 Sephi-Chan RE: recuperer un Champ de base de donnees au hasard - Faelnor - 10-12-2008 finallement j'ai fait sa , sa a l'air de marcher Code PHP :
mais je sais pas si question optimisation c'est bon. RE: recuperer un Champ de base de donnees au hasard - Karedas - 10-12-2008 (10-12-2008, 10:11 AM)diablo846 a écrit : finallement j'ai fait sa , sa a l'air de marcher La solution proposée par Sephi-Chan est de loin bien meilleure. Tu n'as qu'une commande sql à lancer et tu ne fais pas travailler php hors de la lecture du recordset. En prime si tu as une bonne classe mysql, le tout tient en 1 ligne: Code PHP :
RE: recuperer un Champ de base de donnees au hasard - Seren - 10-12-2008 D'après la discussion sur le premier lien que j'ai filé, il semblerait que le ORDER BY RAND() peut être coûteux si on a une grosse table. Si il n'y a qu'une dizaine, voir une centaine de ville c'est sûrement la meilleur solution. RE: recuperer un Champ de base de donnees au hasard - Karedas - 10-12-2008 (10-12-2008, 11:28 AM)Seren a écrit : D'après la discussion sur le premier lien que j'ai filé, il semblerait que le ORDER BY RAND() peut être coûteux si on a une grosse table. Si il n'y a qu'une dizaine, voir une centaine de ville c'est sûrement la meilleur solution. En effet je viens de faire le test sur une table de 25 millions d'enregistrements totalisant 2.1Gb => 178 secondes pour avoir une réponse. Su 2.5 millions totalisant 184Mb => j'ai un résultat en 7 secondes. Sur 300000 totalisant 90Mb => 600ms Effectivement même sur une petite table de 300000 lignes c'est franchement nul. A réserver donc à des infos en faible nombre. RE: recuperer un Champ de base de donnees au hasard - Seren - 10-12-2008 Merci d'avoir testé et de nous avoir donné le résultat. RE: recuperer un Champ de base de donnees au hasard - Sephi-Chan - 10-12-2008 Oui j'ai eu l'occasion de faire quelques tests avec cette fonction (pour mieux me rendre compte de ce qu'on lui reprochait). Toutefois, il faut mettre ça en relation avec le nombre d'appel à cette requête et la taille de la table :
Voilà pourquoi je maintiens que — dans ce cas — la requête que je propose est meilleure. Sephi-Chan RE: recuperer un Champ de base de donnees au hasard - phenix - 10-12-2008 Si l'ORDER BY rand() est plus lent sur un grosse table, il reste quand même plus rapide que le système avec PHP... De plus, je doute que tu arrives à 300000 villes :hahahaha: |