Pour sélectionner aléatoirement des enregistrements d'une table; dois-je toujours définir une variable temporaire en PHP? J'ai besoin d'aide pour sélectionner des lignes aléatoires dans un modèle CodeIgniter, puis afficher trois lignes différentes dans une vue chaque fois que ma page d'accueil est affichée. Quelqu'un at-il des idées sur la façon de résoudre ce problème? Merci d'avance!Sélection aléatoire de lignes avec MySQL
Répondre
J'ai ce morceau de code en production pour obtenir un devis aléatoire. Utiliser la fonction RAND de MySQL était super lent. Même avec 100 citations dans la base de données, je remarquais un décalage sur le site Web. Avec cela, il n'y avait pas de décalage du tout.
$result = mysql_query('SELECT COUNT(*) FROM quotes');
$count = mysql_fetch_row($result);
$id = rand(1, $count[0]);
$result = mysql_query("SELECT author, quote FROM quotes WHERE id=$id");
je ferais quelque chose comme:
SELECT * FROM table ORDER BY RAND() LIMIT 1;
Cela mettra les données dans un ordre aléatoire, puis revenir seule la première ligne de cet ordre aléatoire.
Si vous ne disposez pas d'une tonne de lignes, vous pouvez simplement:
SELECT * FROM myTable ORDER BY RAND() LIMIT 3;
Si vous avez plusieurs lignes, cela se lent, mais pour des données plus petits ensembles, il fonctionnera très bien. Comme Steve Michel le mentionne dans sa réponse, cette méthode peut devenir très laide pour les grandes tables. Sa suggestion est un bon endroit pour sauter de. Si vous connaissez le PK entier maximum approximatif sur la table, vous pouvez faire quelque chose comme la génération d'un nombre aléatoire entre un et votre valeur maximum PK, puis saisir les lignes au hasard un à la fois comme:
$q="SELECT * FROM table WHERE id >= {$myRandomValue}";
$row = $db->fetchOne($q); //or whatever CI's interface to grab a single is like
Bien sûr, si vous avez besoin de 3 lignes aléatoires, vous aurez trois requêtes ici, mais comme elles sont entièrement sur le PK, elles seront plus rapides que la randomisation de toute la table.
vous avez besoin d'une requête comme ceci:
SELECT *
FROM tablename
WHERE somefield='something'
ORDER BY RAND() LIMIT 3
Il est extrait du deuxième résultat de http://www.google.com/search?q=mysql+random et il devrait fonctionner;)
Commande d'une grande table en rand() peut être très cher si la table est très grande. MySQL devra construire une table temporaire et la trier. Si vous avez une clé primaire et que vous connaissez le nombre de lignes présentes dans la table, utilisez LIMIT x, 1 pour saisir une ligne aléatoire, où x est le numéro de la ligne que vous voulez obtenir.
- 1. MySQL Sélection de lignes Linked
- 2. Sélection de lignes aléatoires dans MySQL
- 3. Sélection aléatoire dans les rails sqlite vs mysql
- 4. Sélection entrée aléatoire dans MySQL avec WHERE problème de la clause
- 5. Sélection de lignes dans jQuery
- 6. MySql aléatoire catégorie limitée sélectionnez
- 7. Retour des lignes dans un ordre aléatoire
- 8. Sélection d'une seule ligne (aléatoire) pour une jointure SQL
- 9. Sélection des lignes dans Tablesorter
- 10. MySQL Sélection nombre
- 11. SQL: sélection de plusieurs lignes par groupe
- 12. Comment obtenir mysql gamme entière aléatoire?
- 13. Sélection d'un flotteur dans MySQL
- 14. mySQL insertion de plusieurs enregistrements avec une sélection
- 15. MySQL A Recherche, A Sélection de plusieurs lignes, Rejoindre et tout dans une requête
- 16. MySql: Sélection à partir de plusieurs tables
- 17. Lignes vides dans MySQL SELECT avec LEFT JOIN
- 18. Mysql: définir une variable dans la sélection
- 19. Conception de MySQL, requête, lignes dubliquées
- 20. Jquery aléatoire citations avec xml?
- 21. comment limiter mes caractères de sélection mysql
- 22. Sélection de lignes uniques dans un ensemble de deux possibilités
- 23. mySQL recherche dans plusieurs lignes
- 24. Transfert de lignes en vrac entre les bases de données Oracle avec un filtre de sélection
- 25. Sélection de lignes SQL par date la plus récente
- 26. Sélection de noeuds XML en tant que lignes
- 27. Désactiver la sélection de lignes dans un datagridview
- 28. Sélectionnez uniquement les lignes uniques dans mysql
- 29. Invalidation de session aléatoire
- 30. MySQL - Sélection d'une colonne non dans le groupe par