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 :

requête multi tables [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2013
    Messages
    226
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 226
    Par défaut requête multi tables
    Bonjour,

    Je ne parviens pas à effectuer une requête SQL portant sur plusieurs tables.

    Voici ma requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $reponse = $connection->query("SELECT *
    	FROM T_TITRES, T_AUTEURS, T_EDITEURS, T_BIBLIOTHEQUE, T_COLLECTIONS, T_SOUSCOLLECTIONS
    	WHERE T_COLLECTIONS.COLLECTION_ID = '".$_POST['selectCollection']."'
    	AND T_SOUSCOLLECTIONS.SOUSCOLLECT_ID IS NULL
    	WHERE T_TITRES.COLLECTION_ID = T_COLLECTIONS.COLLECTION_ID
    	AND T_TITRES.SOUSCOLLECT_ID = T_SOUSCOLLECTIONS.SOUSCOLLECT_ID");
    Il s'agit de récupérer les champs suivants :

    - TOME ET TITRE de la table T_TITRES
    - AUTEUR de la table T_AUTEURS
    - EDITEUR de la table T_EDITEURS
    - BIBLIOTHEQUE de la table T_BIBLIOTHEQUE
    - COLLECTION de la table T_COLLECTIONS
    - SOUSCOLLECTION de la table T_SOUSCOLLECTIONS


    J'espère trouver l'aide d'une âme charitable. Merci d'avance.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Il faut une jointure pour chaque table en utilisant JOIN.
    Et on ne met pas directement dans une requête une donnée saisie par un utilisateur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $sth = $connection->prepare('SELECT TOME, TITRE, AUTEUR, EDITEUR, BIBLIOTHEQUE, COLLECTION, SOUSCOLLECTION
    	FROM T_TITRES
            JOIN T_AUTEURS ON T_AUTEURS.TITRE_ID = T_TITRES.TITRE_ID
            ........
            WHERE T_COLLECTIONS.COLLECTION_ID = :collection_id');
    $sth->execute(array(':collection_id'=>$_POST['selectCollection']));
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    Déjà il y a deux WHERE. Un seul suffit.

    D'autres te diront qu'on ne met pas un paramètre comme tu le fais dans une requête. On utilise prepare.

    ... B

    PS : B signifie "devant C".

    PS2 : il est fatigué badaze...

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2013
    Messages
    226
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 226
    Par défaut
    Et on ne met pas directement dans une requête une donnée saisie par un utilisateur
    Merci pour ce conseil, je ne le savais pas. Je débute en PHP.


    En suivant l'exemple de Sabotage, ma requête ne fonctionne pas.

    Ci-joint un schema de ma base de données.

    BIBLIOTHEQUE.pdf

  5. #5
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    Si tu as écrit une requête poste la.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2013
    Messages
    226
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 226
    Par défaut
    Effectivement, ce serait mieux.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    if (empty($_POST['selectSousCollection'])) {
    	$reponse = $connection->prepare('SELECT TOME, TITRE, AUTEUR, EDITEUR, BIBLIOTHEQUE, COLLECTION, SOUSCOLLECTION
    	FROM T_TITRES, T_AUTEURS, T_EDITEURS, T_BIBLIOTHEQUE, T_COLLECTIONS, T_SOUSCOLLECTIONS
    		RIGHT JOIN T_AUTEURS ON T_AUTEURS.AUTEUR_ID = T_TITRES.AUTEUR_ID
    		RIGHT JOIN T_EDITEURS ON T_EDITEURS.EDITEUR_ID = T_TITRES.EDITEUR_ID
    		RIGHT JOIN T_BIBLIOTHEQUE ON T_BIBLIOTHEQUE.BIBLIOTHEQUE_ID = T_TITRES.BIBLIOTHEQUE_ID
    		RIGHT JOIN T_COLLECTIONS ON T_COLLECTIONS.COLLECTION_ID = T_TITRES.COLLECTION_ID
    		RIGHT JOIN T_SOUSCOLLECTIONS ON T_SOUSCOLLECTIONS.SOUSCOLLECT_ID = T_TITRES.SOUSCOLLECT_ID
    			WHERE T_COLLECTIONS.COLLECTION_ID = :collection_id AND T_SOUSCOLLECTIONS.SOUSCOLLECT_ID IS NULL');
    	$reponse->execute(array(':collection_id'=>$_POST['selectCollection']));
    }
    else {
    	$reponse = $connection->prepare('SELECT TOME, TITRE, AUTEUR, EDITEUR, BIBLIOTHEQUE, COLLECTION, SOUSCOLLECTION
    	FROM T_TITRES, T_AUTEURS, T_EDITEURS, T_BIBLIOTHEQUE, T_COLLECTIONS, T_SOUSCOLLECTIONS
    		RIGHT JOIN T_AUTEURS ON T_AUTEURS.AUTEUR_ID = T_TITRES.AUTEUR_ID
    		RIGHT JOIN T_EDITEURS ON T_EDITEURS.EDITEUR_ID = T_TITRES.EDITEUR_ID
    		RIGHT JOIN T_BIBLIOTHEQUE ON T_BIBLIOTHEQUE.BIBLIOTHEQUE_ID = T_TITRES.BIBLIOTHEQUE_ID
    		RIGHT JOIN T_COLLECTIONS ON T_COLLECTIONS.COLLECTION_ID = T_TITRES.COLLECTION_ID
    		RIGHT JOIN T_SOUSCOLLECTIONS ON T_SOUSCOLLECTIONS.SOUSCOLLECT_ID = T_TITRES.SOUSCOLLECT_ID
    			WHERE T_COLLECTIONS.COLLECTION_ID = :collection_id AND T_SOUSCOLLECTIONS.SOUSCOLLECT_ID = :souscollection_id');
    	$reponse->execute(array(':collection_id'=>$_POST['selectCollection']));
    	$reponse->execute(array(':souscollection_id'=>$_POST['selectSousCollection']));
    }

  7. #7
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    Pourquoi utilises tu right join plutôt que join ( ou inner join) ?

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

Discussions similaires

  1. Problème de requête multi tables
    Par arnold002 dans le forum Requêtes
    Réponses: 1
    Dernier message: 14/03/2010, 08h24
  2. problème requête - 2 tables - count - distinct
    Par avironix2 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 27/12/2007, 10h16
  3. problème de requête multi-table
    Par dergips dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 23/07/2007, 18h21
  4. Problème requête ALTER TABLE
    Par 1tsiMat dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 29/06/2006, 13h16
  5. Problème DELETE multi-tables
    Par Gwipi dans le forum Requêtes
    Réponses: 5
    Dernier message: 22/05/2006, 08h48

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