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

Requêtes MySQL Discussion :

Problème inner join


Sujet :

Requêtes MySQL

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 85
    Points : 67
    Points
    67
    Par défaut Problème inner join
    Bonjour,

    j'ai un petit soucis à propose d'une requête mysql comportant plusieurs inner join :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    "Select * from t_reserve_res 
    	inner join t_creneaux_cr on (t_reserve_res.cr_id = t_creneaux_cr.cr_id) 
    	inner join t_salle_sal on (t_salle_sal.sal_id = t_reserve_res.sal_id) 
    	where cr_creneaux LIKE '$crenau' and sal_id LIKE '$choixsalle'"
    les $crenau et $choixsalle sont initialié avec des valeurs de formulaires HTML. Je suis suis sur quelles sont remplies.

    Cdtl,

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Vous demandez de l'assistance mais vous ne communiquez pas les messages d'erreur que vous obtenez, c'est ballot

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 85
    Points : 67
    Points
    67
    Par défaut
    Voici l'extrait de code php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $reponse3 = $bdd->query("Select * from t_reserve_res 
    	left join t_creneaux_cr on (t_reserve_res.cr_id = t_creneaux_cr.cr_id) 
    	left join t_salle_sal on (t_salle_sal.sal_id = t_reserve_res.sal_id) 
    	where cr_creneaux LIKE '$crenau' and sal_id LIKE '$choixsalle'");
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $res3 = $reponse3->fetchAll();
    il me dit que le fetchAll() ne peut pas être appliqué sur un non-objet. Ce qui veut dire que ma requête renvoie rien ..

    Merci de votre réponse,
    Cdtl,

  4. #4
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 381
    Points : 19 065
    Points
    19 065
    Par défaut
    Salut breizhcola29.

    Quand on demande de l'aide, on commence par expliquer ce que l'on fait, et le genre de problème que l'on a !
    1) vous utilisez 'MySqli' en mode objet.
    2) vous utilisez une requête préparée.

    De plus, vous devez donner la totalité des informations qui nous permettrons de résoudre votre problème. A savoir :
    --> les tables mysql qui sont en cause.
    --> le code php complet.
    --> les messages d'erreurs.
    --> quelques explications sur ce que vous voulez obtenir.

    Il semble que vous ne savez pas utiliser mysqli en mode objet sur une requête préparée.

    Voici ce que j'aurai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $query = "select id, libelle, date, time from t_reserve_res left join t_creneaux_cr on t_reserve_res.cr_id = t_creneaux_cr.cr_id left join t_salle_sal on t_salle_sal.sal_id = t_reserve_res.sal_id where cr_creneaux LIKE ? and sal_id LIKE ?";
    Vous remarquez les points d'interrogations. Cela sert à introduire les paramètres de la requête.
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    if (!($sel = $link->prepare($query)))
    {
    	printf("Erreur Prepare : %s\n", $link->error);
    	exit();
    }
     
    /*---------------------------------------------*/
    /*     Passage des paramètres et exécution     */
    /*---------------------------------------------*/
     
    $time='19:08:07';
     
    if (!($sel->bind_param("s", $crenau)))
    {
    	printf("Erreur Bind Param 'crenau' : %s\n", $link->error);
    	exit();
    }
     
    if (!($sel->bind_param("s", $choixsalle)))
    {
    	printf("Erreur Bind Param 'choixsalle' : %s\n", $link->error);
    	exit();
    }
     
    $sel->execute();
     
    /*------------------------------*/
    /*     Nombre de lignes lus     */
    /*------------------------------*/
     
    $sel->store_result();
     
    $nbr = $sel->num_rows;
    echo "nombre de lignes lus : ".$nbr."\n";
     
    /*----------------------------------*/
    /*     Récupération des valeurs     */
    /*----------------------------------*/
     
    $row=array();
    $sel->bind_result($row['id'],$row['libelle'],$row['date'],$row['time']);
     
    /*----------------------------*/
    /*     Lecture des lignes     */
    /*----------------------------*/
     
    echo "+----+-----------+------------+----------+\n";
    echo "| Id |  Libelle  |    Date    |   Time   |\n";
    echo "+----+-----------+------------+----------+\n";
     
    while ($sel->fetch())
    {
    	printf("|%3s |%10s |%11s |%9s |\n", $row['id'],$row['libelle'],$row['date'],$row['time']);
    }
     
    echo "+----+-----------+------------+----------+\n";
     
    /*----------------------------------------------*/
    /*     Libération des données de la requête     */
    /*----------------------------------------------*/
     
    $sel->close();
    Ce code demande quelques explications :

    a) pas d'étoile dans le select, mais les noms des colonnes à extraire.
    b) quand tu as un paramètre à passer, tu mets un '?'. Dans ton cas, tu as deux paramètres.
    c) $link->prepare() permet de préparer ta requête.
    d) $sel->bind_param() permet de faire le passage des paramètres. Il y a deux paramètres alors deux appels.
    e) $sel->execute() permet d'exécuter ta requête.
    f) bind_result() permet d'extraire les résultats en les placant dans un tableau.
    D'où l'importance de mettre dans le select, les noms des colonnes.
    g) $sel->fetch() permet de passer d'une ligne à une autre.
    h) $row['id'], c'est la valeur de la colonne 'id'.
    i) $sel->close() fermeture du curseur.

    Normalement, ce n'est pas dans le forum mysql que l'on pose ce genre de question, mais dans celui consacré à php.
    D'habitude j'utilise le PDO, mais vu que vous préfèrez MySqli en mode objet, j''ai exceptionnellement donné une solution.
    Sinon, vous pouvez consulter la documentation php : http://php.net/manual/fr/pdostatement.bindparam.php

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 85
    Points : 67
    Points
    67
    Par défaut
    Bonjour,

    merci pour cette réponse très complète. Ce que je ne comprenais pas dans ma reqûete c'est qu'avec un seul inner join elle fonctionnait très bien mais dès que je veux en mettre deux, elle ne fonctionnait plus du tout..

    Cdtl,

  6. #6
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 381
    Points : 19 065
    Points
    19 065
    Par défaut
    Salut breizhcola29.

    Dans votre requête, vous mettez '*' pour sélectionner les noms des colonnes.
    On ne procède jamais ainsi car il faut toujours mettre en correspondance un nom de colonne unique avant l'extraction que vous faites par la suite.

    Quand on utilise les apostrophes directement, on met un antislash. Il se peut que l'une de vos valeurs en tant que paramètre ait une apostrophe, d'où une erreur.

    Pour terminer, vu que vous nous donnez qu'un extrait et non la totalité de votre code, il est difficile de deviner ce que vous avez fait.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

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

Discussions similaires

  1. [MySQL] Problème INNER JOIN
    Par andaman dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 11/02/2011, 14h46
  2. Problème inner join
    Par sky88 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 07/12/2010, 21h30
  3. Problème INNER JOIN GROUP BY
    Par benjisan dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 16/05/2007, 16h18
  4. Problème de jointure avec INNER JOIN et LEFT OUTER JOIN
    Par tonio-lille dans le forum Langage SQL
    Réponses: 4
    Dernier message: 10/02/2006, 12h45
  5. [Oracle] problème avec INNER JOIN
    Par Philofish dans le forum Langage SQL
    Réponses: 5
    Dernier message: 15/09/2005, 10h20

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