sql(LIMIT)

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : sql(LIMIT)

par Hubert Roksor » 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:

par albat » 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é.

par Invité » 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

par Hubert Roksor » 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:

par albat » 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 ?...

par Hubert Roksor » 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.

par demipoulp » 07 févr. 2006, 12:33

$nb deja si c'est une variable

par Invité » 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.

par Cyrano » 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 :?

par dieudo » 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

par Cyrano » 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

sql(LIMIT)

par dieudo » 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