OVH Cloud OVH Cloud

mysql - pointer sur un enregistrement précis

5 réponses
Avatar
Serafin
Bonjour,

Mon problème: après tirage d'un nombre aléatoire n dans php, je voudrais
récupérer les données de l'enregistrement n d'une table triée: SELECT *
FROM table ORDER champ1
Je ne vois pas la syntaxe, en dehors de faire une boucle peignant toute
la table jusqu'à n. Il y a surement plus performant ! Mais quoi ?

Merci pour vos lumières

http://coatmeur.fr
http://jean-francois-coatmeur.fr

5 réponses

Avatar
Pif
juste une remarque, le LIMIT est bizarrement pas performant du tout en
MySQL.... mais c'est toujours mieux que tout se palucher dans une boucle...
Avatar
Antoun
En supposant que $n soit ton nombre PHP et qu'il parte de zéro, c'est (en
syntaxe MySQL)
LIMIT $n, 1

Si tu n'as pas besoin de connaître $n dans ton code PHP, tu peux aussi le
jouer en pur MySQL :
ORDER BY RAND()
LIMIT 1

--
Antoun

Guide complet MySQL 5, par Antoine Dinimant, éd. MicroApplication
http://www.microapp.com/livre_mysql_7873.html
Avatar
Serafin
Antoun a écrit :
En supposant que $n soit ton nombre PHP et qu'il parte de zéro, c'est (en
syntaxe MySQL)
LIMIT $n, 1

Si tu n'as pas besoin de connaître $n dans ton code PHP, tu peux aussi le
jouer en pur MySQL :
ORDER BY RAND()
LIMIT 1

--
Antoun

Guide complet MySQL 5, par Antoine Dinimant, éd. MicroApplication
http://www.microapp.com/livre_mysql_7873.html




Merci à tous.

LIMIT $n,1 marche au poil.

Si j'ai besoin de connaitre n, car je l'enregistre dans une table (en
fait, il s'agit de sélectionner pour chaque jour une photo "la photo du
jour", extraite d'une table). Mais je prend note de la syntaxe ORDER BY
RAND() LIMIT 1


http://coatmeur.fr
http://jean-francois-coatmeur.fr
Avatar
Pif
Si tu fais un order by rand() limit 1... il ne risque pas de créer un
tri et donc de prendre plus de temps ???

Antoun a écrit :
En supposant que $n soit ton nombre PHP et qu'il parte de zéro, c'est (en
syntaxe MySQL)
LIMIT $n, 1

Si tu n'as pas besoin de connaître $n dans ton code PHP, tu peux aussi le
jouer en pur MySQL :
ORDER BY RAND()
LIMIT 1

--
Antoun

Guide complet MySQL 5, par Antoine Dinimant, éd. MicroApplication
http://www.microapp.com/livre_mysql_7873.html


Avatar
nospam
Antoun wrote:

Pif wrote:
> Si tu fais un order by rand() limit 1... il ne risque pas de créer un
> tri et donc de prendre plus de temps ???

à tester ;-)



Je confirme, sur une grosse table c'est une très mauvaise idée :)

explain select * from matable order by rand() limit 1 G

*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: matable
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 545213
Extra: Using temporary; Using filesort


--
Romuald Brunet, ICQ 33033393

Remplacez nospam par mon prénom pour me contacter par email