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 :

Récupération informations sur plusieurs tables BDD


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Chef de Projet et futur développeur web qui s'entraîne dur
    Inscrit en
    Avril 2016
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de Projet et futur développeur web qui s'entraîne dur

    Informations forums :
    Inscription : Avril 2016
    Messages : 49
    Par défaut Récupération informations sur plusieurs tables BDD
    Bonjour

    Je me permets de vous demander de l'aide par rapport a l'utilisation de l'inner join que je dois pas bien réussir à faire...

    J'ai une page, qui affiche un tableau avec plusieurs lignes concernant des "clients".
    Chaque ligne récupère des informations via une entrée en BDD, jusqu'ici tout va bien;

    Sauf que dans ce tableau, j'ai 4 colonnes, dont 1 qui détient des informations sur une table différente que les autres. J'ai cru comprendre qu'avec un inner join je pouvais effectuer une requête SQL pour récupérer des informations dans les deux donc voici ma requête :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT customersiso.customeriso_id, vendorsiso.vendoriso_lastname, vendorsiso.vendoriso_firstname FROM customersiso INNER JOIN vendorsiso ON customersiso.vendoriso_id = vendorsiso.vendoriso_id

    Cette requête (après test sur phpmyadmin) m'affiche bien les informations sur chaque ligne du tableau, pour avoir le vendeur associé a chaque customeriso_id.

    Mon problème est le suivant :
    je n'arrive pas a utiliser cette requête correctement pour récupérer le nom et prénom du vendeur associé a la ligne du tableau en question.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    					<tbody>
    						<?php foreach ($customersIso as $customer): ?>
    						<tr>
    							<td><a href="index.php?action=showCustomerIsoPage&customerIsoId=<?= $customer->customerIsoId()?>&lastname=<?= $customer->lastname()?>"><?= $customer->lastname()?> <?= $customer->firstname() ?></a></td>
    							<td><?= $customer->city()?></td>
    							<td><!-- ici devrait apparaître le nom du vendeur --></td>
    							<td><?= $customer->date()?></td>
    						</tr>
    						<?php endforeach; ?>
    					</tbody>

    Est-il possible d'utiliser deux foreach en un par exemple ?

    Merci beaucoup pour votre aide

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 672
    Par défaut
    éditer votre message pour nous montrer le code PHP que vous utilisez pour la requête SQL.

  3. #3
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    Salut,

    Difficile de répondre précisément à cette question vu que tu ne passes pas par les méthodes "classiques" pour tes requêtes mais bien par un objet.
    Vu qu'on ne sait pas comment est construit l'objet, on ne peut pas te dire comment l'afficher ^^

    La première chose à faire est d'afficher les valeurs pour savoir comment elles sont enregistrées (et donc voir comment les afficher)

    Donc 2 solutions : afficher tout l'objet, ou -à chaque ligne- afficher l'objet de la ligne

    Tu peux mettre ça dans ta boucle foreach()
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    echo PHP_EOL . '<pre>$customer: ' . print_r($customer, true) . '</pre>' . PHP_EOL;

    Pour répondre à ta seconde question, tu peux imbriquer autant de boucles que nécessaires.
    Attention cependant que ça complexifie pas mal la lecture mais aussi l'interprétation du code (cette dernière est appelée "Grand O") !

  4. #4
    Membre averti
    Homme Profil pro
    Chef de Projet et futur développeur web qui s'entraîne dur
    Inscrit en
    Avril 2016
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de Projet et futur développeur web qui s'entraîne dur

    Informations forums :
    Inscription : Avril 2016
    Messages : 49
    Par défaut
    Je savais pas si je devais éditer ou poster un nouveau message, mais voici le cheminement de mon code :

    Model :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        public function getVendorIsoByIdCustomer()
        {
            $vendorsIso = [];
            $db = $this->getDb();
            $getVendorsIso = $db->query('SELECT customersiso.customeriso_id, vendorsiso.vendoriso_lastname, vendorsiso.vendoriso_firstname FROM customersiso INNER JOIN vendorsiso ON customersiso.vendoriso_id = vendorsiso.vendoriso_id');
            while ($vendorIso = $getVendorsIso->fetch(PDO::FETCH_ASSOC))
            {
                $vendorsIso[] = new VendorIso($vendorIso);
            }
            return $vendorsIso;
        }
    Controlleur :
    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
        public function administrationIsoPage()
        {
            if (!isset($_SESSION['username']))
            {
                header("Location: index.php?");
                exit();
            }
            $customersIso = $this->customerIsoManager->getCustomersIso();
            $vendorsIso = $this->customerIsoManager->getVendorIsoByIdCustomer();
            $view = new view("AdministrationIsoPage", "Page d'administration Isolation");
            $view->generateAdministrationPage(array(
                'customersIso' => $customersIso,
                'vendorsIso' => $vendorsIso
            ));
        }
    mes entités sont faites comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class VendorIso extends AbstractEntity
    {
        private $vendoriso_id;
        private $vendoriso_lastname;
        private $vendoriso_firstname;
        private $vendoriso_address;
        private $vendoriso_postal_code;
        private $vendoriso_city;
        private $vendoriso_date_of_birth;
        private $vendoriso_place_of_birth;
        private $vendoriso_nationnality;
        private $vendoriso_social_insurance_number;
        private $vendoriso_code;
    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
    class CustomerIso extends AbstractEntity
    {
        private $customeriso_id;
        private $vendoriso_id;
        private $lastname;
        private $firstname;
        private $address;
        private $locality;
        private $city;
        private $postal_code;
        private $phone_number_p;
        private $phone_number_f;
        private $email;
        private $situation;
        private $area_attic;
        private $area_wall;
        private $area_flooring;
        private $iso_type;
        private $iso_type1;
        private $house_age;
        private $attic_status;
        private $attic_status1;
        private $attic_status2;
        private $window;
        private $attic_access;
        private $attic_access1;
        private $attic_access2;
        private $heat_type;
        private $heat_type1;
        private $heat_type2;
        private $heat_type3;
        private $financing;
        private $population;
        private $documents;
        private $documents1;
        private $documents2;
        private $date;
    et la vue vous l'avez plus haut...
    Lorsque j'ai réussi a faire une tentative qui fonctionnait, malheureusement, je n'ai pas réussi a avoir un seul "vendeur" pour une ligne, mais j'avais à chaque fois toute la liste disponible, donc ça m'effectuait pas le tri...

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    ... (erreur)...

  6. #6
    Membre averti
    Homme Profil pro
    Chef de Projet et futur développeur web qui s'entraîne dur
    Inscrit en
    Avril 2016
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de Projet et futur développeur web qui s'entraîne dur

    Informations forums :
    Inscription : Avril 2016
    Messages : 49
    Par défaut
    Bonjour jreaux62,

    Je n'ai pas bien saisi le sens de votre message ? Vous parlez de messages d'erreurs que j'ai en exécutant le code ?
    Si c'est le cas, alors j'en ai pas...

  7. #7
    Invité
    Invité(e)
    Par défaut
    Non, en fait, c'était une erreur de ma part...
    (Je ne maitrise ni la POO, ni le MVC.)

    Par contre, j'ai l'impression que tu t'y prends mal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                $vendorsIso[] = new VendorIso($vendorIso);
    • Quel rapport avec la requête ?
    • Qu'espères-tu récupérer ainsi ?

    Tu devrais au moins vérifier ce que tu récupères...

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

Discussions similaires

  1. Schema BdD : FK sur plusieurs tables ?
    Par Firlfire dans le forum Schéma
    Réponses: 5
    Dernier message: 17/06/2019, 18h20
  2. [MySQL] script de login recuperer des informations sur plusieurs tables
    Par hichoum dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 05/07/2009, 15h35
  3. Ajouter des informations sur plusieurs tables
    Par nana 69 dans le forum IHM
    Réponses: 6
    Dernier message: 08/07/2008, 10h39
  4. Récupération d'informations sur plusieures lignes
    Par Oli_Ifre dans le forum Langage
    Réponses: 6
    Dernier message: 03/04/2007, 08h57
  5. Réponses: 5
    Dernier message: 30/10/2006, 16h23

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