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

  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 691
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 691
    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...

  8. #8
    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
    Effectivement, ça n'a pas trop de rapport... Mais si je conservais l'entité "CustomerIso" je peux pas accéder aux objets à l'intérieur de VendorIso (ce qui me paraît normal) donc la est mon soucis également...
    J’espérais pouvoir instancier l'entité pour pouvoir ensuite accéder aux objets à l'intérieur avec le return... mais je crois que je me suis perdu

    A l'heure actuelle, lorsque je passe par "VendorIso" pour ta citation, j'arrive tout de même à avoir les valeurs Lastname() et Firstname() de l'entité VendorIso. Donc semblerait être sur la bonne voie... par contre, j'ai dans chaque ligne du tableau, TOUTES les informations qui s'affichent et non celui correspondant à l'ID "customeriso_id".

  9. #9
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut,

    j'essaie de comprendre où tu veux en venir mais j'ai du mal.
    Plusieurs points :
    - pourquoi utiliser des entités alors qu'un simple tableau suffirait
    - tu peux tout récupérer en une seule fois (je pars du principe qu'il est possible d'avoir des clients sans vendeur LEFT JOIN):
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT
        c.customeriso_id, 
        c.customeriso_lastname,
        c.customeriso_firstname,
        c.customeriso_city,
        c.cutomeriso_date,
        v.vendoriso_id,
        v.vendoriso_lastname,
        v.vendoriso_firstname
    FROM
        customeriso AS c LEFT JOIN vendoriso AS v ON c.vendoriso_id = v.customeriso_id
    ORDER BY
        c.customeriso ASC
    Après tes traitements sont d'une extrême lourdeur et puis à l'affichage, rien est sécurisé !

    J'ai une question : tu suis un framework MVC existant ou tout ça c'est de ton cru ?

  10. #10
    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
    Salut rawsrc,

    Je te remercie pour ta réponse,

    Tout mon traitement se faisait jusqu'à maintenant via des entités donc j'ai continué sur cette voie la... et en ce qui concerne les clients, ils seront obligatoirement associés à un vendeur, mais pour ça je devrais m'en sortir.

    Que veux-tu dire par extrême lourdeur ?
    Et concernant la sécurité c'est "normal" on va dire, car je m'en suis pas du tout préoccupé pour le moment j'avais décidé de laisser ça pour la fin afin de pouvoir me concentrer sur une seule chose à la fois, n'étant déjà pas à l'aise du tout avec chacun des différents aspects.

    Je ne suis pas de MVC existant, disons que c'est un entraînement sur long terme et que j'essaye de bidouiller ce que je peux en apprenant de nouvelles choses tous les jours.

    (PS: je suis tout ouïe niveau conseils/remarques pour m'améliorer.)


    (Concernant ta réponse, j'essaye de l'appliquer dès que je peux et te tiens informé.)

  11. #11
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Citation Envoyé par Demirdiouff Voir le message
    Et concernant la sécurité c'est "normal" on va dire, car je m'en suis pas du tout préoccupé pour le moment j'avais décidé de laisser ça pour la fin
    euh, ça va être chaud ! T'imagine la reprise de code que cela va te faire !!! Sans compter les oublis (forcément, y en aura).

    Par extrême lourdeur, quand je vois ça :
    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;
    j'ai mal à l'aorte, vois-tu

    Tu es allé te promener sur mon blog DVP, parce que question MVC y a de quoi se repaître

  12. #12
    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
    Effectivement, je vais peut être faire une pause dès que j'aurais résolu mon problème en reprenant la partie sécurité sérieusement...

    Je me suis penché durant ce week-end sur ton blog, ce qui m'a permis d'apprendre pas mal d'éléments supplémentaires, je te remercie pour l'info.

    Cependant, quand je reprend la requête SQL (après quelques corrections):
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT 
    c.customeriso_id, 
    c.lastname, 
    c.firstname, 
    c.city, 
    c.date, 
    v.vendoriso_id,
    v.vendoriso_lastname, 
    v.vendoriso_firstname 
    FROM 
    customersiso AS c LEFT JOIN vendorsiso AS v ON c.vendoriso_id = v.customeriso_id 
    ORDER BY 
    c.customersiso ASC

    j'ai cette erreur :
    #1054 - Champ 'v.customeriso_id' inconnu dans on clause
    ... ça voudrait dire qu'il me faut un champ "customeriso_id" dans vendorsiso ?

  13. #13
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    c'est v.vendoriso_id

  14. #14
    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
    Merci beaucoup !

+ 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