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

PHP & Base de données Discussion :

Inner join sur sous requête [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre très actif
    Profil pro
    Webmaster
    Inscrit en
    Octobre 2009
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2009
    Messages : 125
    Par défaut Inner join sur sous requête
    Re bonjour,

    Voilà j'ai deux tables :

    tbl1
    Compte
    Solde
    Mvt
    client

    et

    tbl2 :
    comptes
    debit
    credit


    Les deux requêtes ci-dessous fonctionnent bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM tbl1 WHERE client = 'azderftygh'
    et la deuxième :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT tbl2.Comptes, IF(tbl1.Solde < 0, tbl2.Debit , tbl2.Credit) AS valeur
    FROM tbl2
    INNER JOIN tbl1 ON tbl2.Comptes <= tbl1.Compte
    WHERE tbl2.Comptes <= ?
    ORDER BY tbl2.Comptes DESC
    LIMIT 1
    Ma question est comment les imbriquer ?

    Merci à l'âme charitable qui saura m'aider

    Thibaut

  2. #2
    Membre expérimenté
    Inscrit en
    Mai 2010
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 177
    Par défaut
    Je ne suis pas certain que d'imbriquer tes requêtes soit vraiment nécessaire ici, tu ne peux pas simplement faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT tbl1.Solde, tbl1.mvt, tbl1.Client, tbl2.mvt, IF(tbl1.Solde < 0, tbl2.Debit , tbl2.Credit) AS valeur
    FROM tbl2
    INNER JOIN tbl1 ON tbl2.Comptes <= tbl1.Compte
    WHERE tbl2.Comptes <= ? AND tbl1.client = 'azderftygh'
    ORDER BY tbl2.Comptes DESC
    LIMIT 1
    edit: Est-ce que tu pourrais être un peu plus précis quand tu dis "imbriquer" tes requêtes? Il faudrait spécifier laquelle est la requête interne et laquelle est la requête externe.

    (La deuxième solution que j'avais originalement proposée avait trop des erreurs alors je l'ai retirée désolé si je t'ai donné de faux espoirs).

  3. #3
    Membre très actif
    Profil pro
    Webmaster
    Inscrit en
    Octobre 2009
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2009
    Messages : 125
    Par défaut
    hello,

    merci je regarde ça de suite et je te tiens au courant !!

  4. #4
    Membre expérimenté
    Inscrit en
    Mai 2010
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 177
    Par défaut
    Bon, après avoir regardé les choses attentivement, je crois avoir réussi à te fournir une solution un peu moins boiteuse que mon originale. Désolé de t'avoir induit en erreur initialement .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT tbl2.mvt, IF(tblCeQueTuVeux.Solde < 0, tbl2.Debit , tbl2.Credit) AS valeur
    FROM tbl2
    INNER JOIN (
    SELECT * FROM tbl1 WHERE client = 'azderftygh') as tblCeQueTuVeux 
    ON tbl2.Comptes <= tblCeQueTuVeux.Compte
    WHERE tbl2.Comptes <= ?
    ORDER BY tbl2.Comptes DESC
    LIMIT 1

  5. #5
    Membre très actif
    Profil pro
    Webmaster
    Inscrit en
    Octobre 2009
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2009
    Messages : 125
    Par défaut
    Nickel, la 2e solution fonctionne ! grand merci !!

    Thibaut

  6. #6
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    Je trouve bizarre ta condition de jointure avec "inférieur ou égal" entre deux colonnes de comptes !
    Ne sont-ce pas des numéros de comptes ? Ne faudrait-il donc pas plutôt faire une égalité entre les deux ?

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT tbl2.mvt, 
      IF(tblCeQueTuVeux.Solde < 0, tbl2.Debit , tbl2.Credit) AS valeur
    FROM tbl2
    INNER JOIN tbl1 ON tbl2.Comptes = tbl1.Compte
    WHERE tbl2.Comptes = ?
        AND client = 'azderftygh'
    ORDER BY tbl2.Comptes DESC
    LIMIT 1
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  7. #7
    Membre très actif
    Profil pro
    Webmaster
    Inscrit en
    Octobre 2009
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2009
    Messages : 125
    Par défaut
    Hello,

    Non, ma condition <= est bonne, car dans ma tbl2, je n'ai pas tous les numéros de comptes présents dans tbl1 (en fait ce sont des codes de regroupements clients). Dans ce cas, je prends le code de regroupement directement inférieur...

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

Discussions similaires

  1. inner join sur 3 Tables
    Par faressam dans le forum Développement
    Réponses: 3
    Dernier message: 22/04/2008, 14h23
  2. deux inner join sur une table
    Par the-player777 dans le forum Requêtes
    Réponses: 2
    Dernier message: 05/11/2007, 09h43
  3. 3 Inner Join sur la même table
    Par Zolex dans le forum Requêtes
    Réponses: 6
    Dernier message: 23/05/2007, 12h32
  4. LEFT JOIN sur sous requete
    Par passie dans le forum Langage SQL
    Réponses: 4
    Dernier message: 16/06/2006, 12h51
  5. INNER JOIN sur une requete UPDATE
    Par Immobilis dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 06/03/2006, 14h05

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