IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Oracle Discussion :

SELECT limité pour multipage web.


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de thanaos
    Inscrit en
    Mai 2006
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 94
    Par défaut SELECT limité pour multipage web.
    Bonjour à tous zet à toutes.
    L'affichage multipage web nécessité par un nombre important de ligne de résultat pour un SELECT est on ne peut plus simple avec une sgbd comme MySQL est son option LIMIT. Pour Oracle cette option n'existe pas.
    Voici la technique que j'utilise le but étant d'avoir vos opinions et vos éventuelles solutions.
    (PHP4, Oracle9)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    query_origine =  "SELECT * FROM table1"
    Pour connaitre le nombre de pages à afficher, je dois connaitre le nombre de lignes d'où l'execution d'une première requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT count(*) FROM table1
    Il faut ensuite que je ne selectionne que les lignes nécessaires à l'affichage d'une page
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    query_affichage = "
    SELECT * FROM 
    	(
    	SELECT e.*, ROWNUM RN FROM ( ".$query_origine.") e 
    	) 
    	WHERE RN BETWEEN ".$premiere_ligne." AND ".$derniere_ligne;
    Auriez vous des remarques ou des solutions alternatives. Merci.
    nota : les variables sont précédées du signe $.

  2. #2
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967

  3. #3
    Membre confirmé Avatar de thanaos
    Inscrit en
    Mai 2006
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 94
    Par défaut
    Bonjour Fred_D. Mes respects, Grand sage oraclien.
    J'ai un petit souci avec les explications de la page
    http://oracle.developpez.com/faq/?page=11#rankrownum.
    Comme dit dans la Faq : "Il faut donc trier les données avant qu'Oracle ne leur affecte un numéro", donc si ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SQL> SELECT ROWNUM, a.* 
    2 FROM ( 
    3 SELECT * 
    4 FROM emp 
    5 ORDER BY sal 
    6 ) a 
    7 WHERE ROWNUM < 5 ;
    est correct, cela ne peut pas l'être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT   * 
    FROM ( SELECT ROWNUM NUM, ename, job 
               FROM EMP ORDER BY sal
             ) 
    WHERE    NUM BETWEEN 1 AND 5 ;
    Ce que tu veux me dire c'est que ma technique est bonne ou qu'il n'y en a pas d'autres ?

  4. #4
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    oui c'est bon

    une alternative consiste à utiliser RANK()

  5. #5
    Membre confirmé Avatar de thanaos
    Inscrit en
    Mai 2006
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 94
    Par défaut
    Merci.
    Dois je demander la modification de la Faq pour éviter les erreurs (ou plutôt les mauvaises interprétations ?

  6. #6
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    SQL> SELECT   * 
      2  FROM ( SELECT ROWNUM NUM, ename, job, sal 
      3             FROM EMP ORDER BY sal
      4           ) 
      5  WHERE    NUM BETWEEN 1 AND 5 ;
           NUM ENAME      JOB              SAL
    ---------- ---------- --------- ----------
             1 SMITH      CLERK            900
             3 WARD       SALESMAN        1250
             5 MARTIN     SALESMAN        1250
             2 ALLEN      SALESMAN        1600
             4 JONES      MANAGER         2975
    SQL>
    ou est la problème avec cette requête ?

  7. #7
    Membre confirmé Avatar de thanaos
    Inscrit en
    Mai 2006
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 94
    Par défaut
    Merci pour toute votre aide.
    Bonne journée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2013] Types de données limités pour Access Web App
    Par RichardUW dans le forum Access
    Réponses: 0
    Dernier message: 03/07/2014, 19h32
  2. Votre langage de programmation serveur préféré pour le Web ?
    Par Marc Lussac dans le forum Général Conception Web
    Réponses: 82
    Dernier message: 18/02/2009, 17h50
  3. "LIMIT" pour Oracle ?
    Par aweb01 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 29/09/2004, 11h39
  4. Créer un graphique en GIF sous DELPHI pour du web
    Par Thom@s dans le forum Web & réseau
    Réponses: 20
    Dernier message: 08/07/2004, 15h40
  5. equivalent SELECT DISTINCT pour MyBase?
    Par chrisou31 dans le forum Bases de données
    Réponses: 2
    Dernier message: 08/03/2004, 19h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo