Page 1 sur 1
sql(LIMIT)
Posté : 07 févr. 2006, 10:02
par dieudo
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
Posté : 07 févr. 2006, 10:07
par Cyrano
Vérifie la doc de mssql : la clause LIMIT est propre à MySQL, pas ^sut que ce soit fonctionnel sur beaucoup d'autres SGBD...

Posté : 07 févr. 2006, 10:28
par dieudo
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
Posté : 07 févr. 2006, 10:58
par Cyrano
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

Posté : 07 févr. 2006, 12:25
par Invité
merci,
mais je ne comprends pas comment faire.l'objectif est d'arriver à afficher pages par pages les données.
Posté : 07 févr. 2006, 12:33
par demipoulp
$nb deja si c'est une variable
Posté : 07 févr. 2006, 12:56
par Hubert Roksor
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.
Posté : 07 févr. 2006, 13:02
par albat
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 ?...
Posté : 07 févr. 2006, 14:07
par Hubert Roksor
Ç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.

Posté : 07 févr. 2006, 14:37
par Invité
merci,
mais mssql ça ne marche, je vais encore chercher, mais si je n'arrive pas,
je vais laisser tomber
une fois encore merci
Posté : 07 févr. 2006, 15:13
par albat
Ç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é.
Posté : 07 févr. 2006, 18:30
par Hubert Roksor
Je peux aussi me tromper hein

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à
