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

Langage SQL Discussion :

Requête qui boucle


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 15
    Points : 10
    Points
    10
    Par défaut Requête qui boucle
    Bonjour j'aurai besoin d'aide pour réaliser une requête

    on m'a chargé de faire une requête sur une table MySql avec deux champs de ce type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    TABLE A(
    ELEMENT D   ELEMENT C
    ELEMENT A   NULL
    ELEMENT C   ELEMENT B
    ELEMENT B   ELEMENT A
    ...
    )

    et je voudrai que m'a requête me sorte ce résultat

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    TABLE A(
    ELEMENT A   NULL
    ELEMENT B   ELEMENT A
    ELEMENT C   ELEMENT B
    ELEMENT D   ELEMENT C
    ... 
    )
    Auriez vous une quelconque piste afin de réaliser ceci?
    (on m'a dit que je n'avais pas besoin d'utiliser de procédure)

    cordialement

  2. #2
    Membre éclairé Avatar de bstevy
    Homme Profil pro
    Solutions Architect
    Inscrit en
    Mai 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Japon

    Informations professionnelles :
    Activité : Solutions Architect
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 552
    Points : 870
    Points
    870
    Par défaut
    t'es sur de ton exemple ?

    Parce que de ce que je vois, il s'agit tout s'implement d'un tri... tu fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * ... order by 1
    et ca te donne ton résultat...

    Sinon, faut que tu m'expliques quelle est la difference entre le haut et le bas, parce qu'a par l'ordre, je comprends pas.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    en faites ma table ressemble a une liste chaînée qui serait dans le désordre.
    Il y a deux champs code et code_suivant (les codes sont sous cette forme (CAC, DEC, DEV)

    si on utilisait cette table

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    TABLE A(
    ELEMENT D   ELEMENT C
    ELEMENT A   NULL
    ELEMENT C   ELEMENT B
    ELEMENT B   ELEMENT A
    )

    la ligne ELEMENT D ELEMENT C serait le premier élément de ma liste chaînée.
    la ligne ELEMENT A NULL serait le dernier

    Je voudrai donc trier ma table du premier élément au dernier ou du dernier élément au premier (ca n'a pas vraiment d'importance).

    J'espère avoir été plus clair.

  4. #4
    Membre éclairé Avatar de bstevy
    Homme Profil pro
    Solutions Architect
    Inscrit en
    Mai 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Japon

    Informations professionnelles :
    Activité : Solutions Architect
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 552
    Points : 870
    Points
    870
    Par défaut
    ouais, en fait ce que tu veux, c'est du recursif...

    c'est quoi ton sgbd ? MySQL ? ca va etre dur à faire je pense... Mais je laisse les specialistes te repondre, je connais pas assez les fonctions dispo sous mysql


    si c'etait oracle, tu aurais pu jeter un oeil ici
    http://www.bikinfo.com/HTML/TD/TD_vs..._Recursive SQL



    Dans l'absolu, c'est de la cosmetique le tri... tu vas te faire taper dessus si les modo passent ^^

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    oui du MySQL, on m'a dit d'utiliser le @ si tu connait des endroits ou ils en parlent, car la recherche google n'est pas très efficace a ce niveau la

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 768
    Points : 52 719
    Points
    52 719
    Billets dans le blog
    5
    Par défaut
    MySQLmerde ne supporte pas les requêtes récursives.... Donc vous êtes dans le M....

    À lire sur MySQmerde : http://blog.developpez.com/sqlpro/p9...oudre_aux_yeux

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    j'ai réussi à avoir un des résultats que je voulais avec cette req

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT @r:=(
            SELECT  r2.test
            FROM    ref_statut_affaire r2
            WHERE   r2.statut_suivant = @r
    			and r2.facturable = 1
            ) AS var
    FROM    (
            SELECT  @r := ''
            ) vars,
            ref_statut_affaire;
    grace a ce site http://explainextended.com/2009/03/25/sorting-lists/

    (test représente mon statut)

    lais je l'ai dans le mauvais sens (je pars de la fin pour arriver au début) aucune idée pour l'avoir dans le bon sens?

  8. #8
    Membre éclairé Avatar de bstevy
    Homme Profil pro
    Solutions Architect
    Inscrit en
    Mai 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Japon

    Informations professionnelles :
    Activité : Solutions Architect
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 552
    Points : 870
    Points
    870
    Par défaut

    C'est juste horrible MySQL... ça pue tellement le séquentiel ta requête, c'est à l'opposé de ce qu'on fait en sql, mais bon, c'est l'outil sur lequel tu es donc faut bien faire avec. Tu as toute ma sollicitude pour etre obligé de bosser avec ca.


    Bref, de ce que je comprends, si tu veux inverser ton ordre, il faut que tu partes du plus gros élément... en fait, dans la partie basse de ta requête, tu as une assignation @r := ''. Il faut remplacer ça par la valeur de ton premier élément.
    Et apres, il faut inverser les deux colonnes pour pouvoir faire la recherche en sens inverse.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    Merci pour l'aide

    ma requête finale ressemble a ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT @r:=(
            SELECT  r2.statut_suivant
            FROM    ref_statut_affaire r2
            WHERE   r2.code = @r
    			and r2.facturable = 1
            ) AS toto
    FROM    (
            SELECT  @r := 'ADM'
            ) vars,
            ref_statut_affaire where facturable = 1;
    j'ai encore une erreur (surement parce que MySQL c'est de la ...)
    que je réglerai plus tard (en attendant j'ai mis en utf8 general ma colonne statut suivant et copier la colonne code ( qui représente le statut père) en utf_ general pour que ça fonctionne (pour ceux que ca pourrait interesser)

    Error Code: 1267. Illegal mix of collations (utf8_unicode_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT) for operation '=' 0.000 sec

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

Discussions similaires

  1. Réponses: 23
    Dernier message: 31/05/2007, 16h09
  2. requête qui boucle sur une autre requête
    Par super_dz dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/09/2006, 20h02
  3. Select qui boucle ou se termine par un Ora-01460
    Par PatriceP dans le forum Oracle
    Réponses: 4
    Dernier message: 29/10/2004, 08h53
  4. Problème requête qui renvoie plusieurs
    Par dai.kaioh dans le forum Langage SQL
    Réponses: 6
    Dernier message: 01/04/2004, 10h07
  5. Sortir d'un progamme qui boucle ou qui refresh
    Par mikevador02 dans le forum C
    Réponses: 12
    Dernier message: 14/12/2002, 09h38

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