Forum Clubic

[sql] requete de sélection

Bonsoir,
honte à moi, j’ai un trou de mémoire… je m’explique :

sous sql :

SELECT * FROM matable LIMIT 1 affichera la première ligne de matable
SELECT * FROM matable LIMIT 0,10 affichera les lignes comprises entre 0 et 10

maintentnant, je souhaiterais afficher toutes les lignes, hormis les 3 premières… mais j’ai zappé la synthaxe à utiliser… :pfff:

quelqu’un pourrait il me rafraîchir la mémoire ? :ane:

Merci par avance :wink:

cordialement…

Si c’est sous MySQL, y a pas d’autre solution que

SELECT * FROM tatable LIMIT debut, 12446744073709551615

C’est pas propre, mais ça te renverra tous les enregistrements jusqu’à la fin.
Pour plus d’infos : http://dev.mysql.com/doc/refman/5.0/fr/select.html

Sinon plus propre :

SQL
[color=blue;font-weight:bold]SELECT[/color] * FROM matable WHERE id NOT IN([color=blue;font-weight:bold]SELECT[/color] id FROM matable LIMIT 3)

Ce qui revient au même. C’est aussi plus lent ('fin pas trop je pense, à tester)

c’est presque bon. il faut simplement ajouter à ta requête des order by contraignant le même champ, car sinon tu risques d’avoir un ordre non déterminé et donc de ne pas forcément exclure les trois premières lignes.

donc de façon plus concise :

SQL
[color=blue;font-weight:bold]SELECT[/color] * FROM matable WHERE id NOT IN([color=blue;font-weight:bold]SELECT[/color] id FROM matable ORDER BY id ASC LIMIT 3) ORDER BY id ASC

et sinon avec une vraie base de données :

SQL
[color=blue;font-weight:bold]SELECT[/color] * FROM matable LIMIT ALL OFFSET 3

http://docs.postgresqlfr.org/8.2/queries-limit.html :siffle:

cette technique ne fonctionne pas sur une page php ?

merci pour vos réponses je m’en vai faire mes essais :wink:

[edit] tiens petite question :

est ce que la requete qui est incluse dans les parenthèses peut être incrémentée par une variable ? étant donné que je la fais déja au dessus dans ma page cette requête…

[re-edit] non ben finalement je vais me contenter de recopier la requête parce que ça marche pas…

[re-re-edit] et en recopiant cette requête, j’ai l’erreur suivante : This version of MySQL doesn’t yet support ‘LIMIT & IN/ALL/ANY/SOME subquery’… j’en conclut qu’il apprécie pas le IN() :frowning:

[énième édition] DESC LIMIT 5 OFFSET 1 là la requète me retourne un résultat correct. par contre avec DESC LIMIT ALL OFFSET 1, sql me retourne une erreur de synthaxe près de “ALL OFFSET 1”… donc l’erreur est prêt de ALL, mais où ça… ? :smiley: 10€ pour celui qui trouve :paf:

l’erreur c’est que ALL c’est pour postgresql :paf:

du coup y-a t’il une solution ? :pt1cable:

Ben ça ! Ou la solution de Sans-Nom revue par benj si t’as un autoincrement sur un champ de ta table :slight_smile:

j’ai en effet oublié de revenir pour préciser que javais utilisé cette solution, avec 9999 (sachant que j’aurais jamais 9999 résultats pour ce script :smiley: )

pour les solutions de sans-nom et benji, j’ai bien un auto_increment mais pas sur le champ qui fera la restriction, du coup c’est mort…

merci à vous :wink:

Ben un tri ça marche sur n’importe quel champ … :slight_smile:

Sinon tu peux passer à pgSQL? :slight_smile:

tu peux développer ? :whistle: