8800 sujets

Développement web côté serveur, CMS

Bonjour à tous

Je voudrais savoir si il existe une notation en SQL pour sélectionner les enregistrement à partir d'un certain nombre jusqu'à la totalité de ceux-ci ?
Modifié par sharky (27 Mar 2009 - 09:42)
Bonjour,

SELECT monchamps FROM matable WHERE id > 'ma valeur'

non?

Smiley biggol

Sinon, BETWEEN qui revient à faire :

SELECT monchamps FROM matable WHERE id > 'ma valeur 1' AND id < 'ma valeur 2'
SELECT monchamps FROM matable WHERE id BETWEEN 'ma valeur 1' AND 'ma valeur 2'

LIMIT va sélectionner toutes les valeurs de ta table avant de les trier ce qui n'est pas du plus optimisé.
Administrateur
Amha, d'un point de vue strictement tableux, LIMIT est bien plus optimisé (sélection des rows) que BETWEEN ou WHERE (sélection des rows + opération de calcul/comparaison sur les valeurs).

Par contre s'il s'agit de faire un tri et de sortir précisément des enregistrements, oui l'id pourra servir. Avec un bon index, un order by et un limit...
Salut,

juste histoire d'en remettre une couche l'idéal est quand même de s'appuyer sur un index qui va bien. Dans ce cas un between utilisé sur la clef sera bien plus performant qu'un limit (et d'ailleurs quel que soit l'usage il sera plus performant qu'un ... qqchose > autrechose and qqchose < autrechoseplusgrand).

Donc pour ce qui est de ta demande tout dépend de ce que tu veux dire par "à partir d'un certain nombre jusqu'à la totalité de ceux-ci".

Si tu parles en termes d'enregistrements sélectionnés (ne prendre que les résultats après les 20 premiers résultats) il faut utiliser LIMIT.

Si tu parles des résultats à partir d'une certaine valeur d'un champ il faut utiliser WHERE monchamp > 20 (en créant l'index sur ce champ s'il n'existe pas encore).
Merci pour vos réponses.

a écrit :
Si tu parles en termes d'enregistrements sélectionnés (ne prendre que les résultats après les 20 premiers résultats) il faut utiliser LIMIT.


C'est bien cela, mais je ne sais pas comment faire avec LIMIT puisque celui-ci doit avoir un nombre d'enregistrement à afficher à partir d'un certain enregistrement ...

Comment faire pour lui dire qu'il affiche TOUT les enregistrements à partir d'un certain nombre ?

Par exemple : affiche tout les enregistrement à partir du 5ème :

LIMIT 5, infini? 
Eh bien je dirais qu'il suffit de mettre un nombre démesuré pour le second argument...
du genre ... LIMIT 5, 99999999999


Edit: c'est d'ailleurs ce qui préconisé sur mysql.com...
Modifié par Heyoan (27 Mar 2009 - 00:34)
Ha oui, c'est déjà ce que je faisait mais je ne trouvais pas ca très "propre".
Je pensais qu'il existait peut-être une notation plus appropriée ...

Ok, c'est nickel.

a écrit :
Edit: c'est d'ailleurs ce qui préconisé sur mysql.com...


Merci pour ta recherche !
Modifié par sharky (27 Mar 2009 - 09:40)
Heyoan a écrit :

Dans ce cas un between utilisé sur la clef sera bien plus performant qu'un limit (et d'ailleurs quel que soit l'usage il sera plus performant qu'un ... qqchose > autrechose and qqchose < autrechoseplusgrand).


"Si expression est supérieure ou égale à min et expression est inférieure ou égale à max, BETWEEN retourne 1, sinon 0. Ceci est équivalent à l'expression (min <= expression AND expression <= max) si tous les arguments sont du même type."

http://dev.mysql.com/doc/refman/5.0/fr/comparison-operators.html

Limit ne sera optimisé que dans certains cas :

http://dev.mysql.com/doc/refman/5.0/fr/limit-optimization.html

Je ne crois pas que la doc précise d'utiliser limit plutôt qu'une clause where, mais bon.
bzh a écrit :
"Si expression est supérieure ou égale à min et expression est inférieure ou égale à max, BETWEEN retourne 1, sinon 0. Ceci est équivalent à l'expression (min <= expression AND expression <= max) si tous les arguments sont du même type."

http://dev.mysql.com/doc/refman/5.0/fr/comparison-operators.html
Oui : je parlais en terme d'optimisation (en me référant par exemple à cet article ).

bzh a écrit :
Limit ne sera optimisé que dans certains cas :

http://dev.mysql.com/doc/refman/5.0/fr/limit-optimization.html
Merci pour le lien. Smiley cligne
Modifié par Heyoan (27 Mar 2009 - 11:27)