sql(LIMIT)

Petit nouveau ! | 3 Messages

07 févr. 2006, 10:02

Bonjour,
j'ai un souci avec ma requête(select * from tab where id=n order by tike asc
limit 0,nb)
j'ai cette erreur: Warning: mssql_query(): message: Ligne 6 : syntaxe incorrecte vers 'limit'. (severity 15)

merci de votre aide

Mammouth du PHP | 19672 Messages

07 févr. 2006, 10:07

Vérifie la doc de mssql : la clause LIMIT est propre à MySQL, pas ^sut que ce soit fonctionnel sur beaucoup d'autres SGBD... :-k
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Petit nouveau ! | 3 Messages

07 févr. 2006, 10:28

merci, je viens de me rentre compte que LIMIT n'est utilisée que pour Mysql,
je me demande s'il n'y a pas une clause en mssql pour l'affichage pages par pages.
j'ai vu top nb qui affiche nb données ,mais je n'arrive pas à faire un script dynamique

merci

Mammouth du PHP | 19672 Messages

07 févr. 2006, 10:58

Ben une solution rapide dans l'immédiat, ce serait d'enregistrer toutes les données dans un tableau dans une variable de session et de travailler sur le tableau au lieu de faire une requête à chaque fois, mais directement en SQL, j'ai déjà vu une astuce une fois, mais je ne me souviens pas trop de la méthode utilisée :?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Invité
Invité n'ayant pas de compte PHPfrance

07 févr. 2006, 12:25

merci,
mais je ne comprends pas comment faire.l'objectif est d'arriver à afficher pages par pages les données.

Eléphant du PHP | 200 Messages

07 févr. 2006, 12:33

$nb deja si c'est une variable
Univers divided by 0 - cucumber error - reboot

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

07 févr. 2006, 12:56

MSSQL propose bien "SELECT TOP n * FROM table" où n est la limite, mais quant sélectionner l'offset... mmh, aucune idée. Tu vas devoir t'arranger autrement je pense.

Avant toute chose, est-ce que tu as une méthode pour ordonner les enregistrements de façon unique ? Notamment, est-ce que "tike" est unique ? Si oui, tu n'as qu'à l'utiliser pour passer d'une page à l'autre en utilisant la valeur minimale/maximale de la page. Par exemple, si tu affiches les "tike" de 123 à 456, tu peux obtenir la page suivante en prenant le top 10 des tike > 456. C'est le mieux que tu puisses faire je pense.

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

07 févr. 2006, 13:02

Je crois me souvenir qu'avec Oracle, on utilise rownum :
SELECT champs FROM table WHERE rownum BETWEEN 10 AND 30;
Cela peut-il te donner une idée ?...

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

07 févr. 2006, 14:07

Ça demanderait vérification mais sous Oracle on ne peut utiliser la pseudo-colonne rownum qu'avec une sous-requête

Code : Tout sélectionner

SELECT * FROM ( SELECT champs FROM table ORDER BY foo ) WHERE rownum BETWEEN 10 AND 30
C'est parce qu'on ne peut pas définir "rownum" sans avoir défini le set de résultat.

Bon, maintenant qu'on a tous bien prouvé qu'on étaient des brèles dans les SQL commerciaux je crois l'ami dieudo n'a plus qu'à acheter un bouquin sur MS SQL. :lol:

Invité
Invité n'ayant pas de compte PHPfrance

07 févr. 2006, 14:37

merci,
mais mssql ça ne marche, je vais encore chercher, mais si je n'arrive pas,
je vais laisser tomber

une fois encore merci

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

07 févr. 2006, 15:13

Ça demanderait vérification mais sous Oracle on ne peut utiliser la pseudo-colonne rownum qu'avec une sous-requête

Code : Tout sélectionner

SELECT * FROM ( SELECT champs FROM table ORDER BY foo ) WHERE rownum BETWEEN 10 AND 30
C'est parce qu'on ne peut pas définir "rownum" sans avoir défini le set de résultat.
J'ai un gros doute.
Je n'ai pas souvenir d'avoir dû faire ça.

Dire que j'ai bossé 4 ans sur des bases Oracle et que j'avais même suivi une formation chez eux...

MS SQL server, j'ai juste pratiqué quelques mois. Désolé.

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

07 févr. 2006, 18:30

Je peux aussi me tromper hein :D
Moi j'ai bossé 1 jour (à télécharger) 4 heures (à installer) et 4 minutes (à utiliser) une base Oracle, donc tu me bats à plates coutures à ce niveau là :lol: