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 :

Requete SQL pour affichage de plusieurs résultats par rapport à un ID [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé Avatar de tyler94
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 126
    Par défaut Requete SQL pour affichage de plusieurs résultats par rapport à un ID
    Bonjour,

    J'ai actuellement deux tables :

    tab1
    id
    nom
    prenom
    tel
    fournisseursid

    tab2
    id_fournisseurs
    fournisseurs

    J'ai un tableau m'affichant tous les fournisseurs en cours.

    Je souhaiterais afficher après un clic et une récupération de L'ID les informations de la tab1 en fonction de id_fournisseurs (tab2)

    La première page est faite (toutes les autres aussi c'est la fin) et la récupération ID aussi mais je seche sur la requête SL pour la seconde page qui est censé m'affiché toutes les infos

    Merci à vous et de votre aide en espérant avoir été clair.

  2. #2
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Par défaut
    Re; si j'ai bien compris votre problème ,vous devez faire une requête paramétré sur l'ID fournisseur afin d'avoir tous les enregistrement en rapport.
    votre paramétré ID reçoit l'ID de votre fournisseur une fois localisé sur la table.

  3. #3
    Membre confirmé Avatar de tyler94
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 126
    Par défaut
    re , je pense que tu as compris oui

  4. #4
    Membre confirmé Avatar de tyler94
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 126
    Par défaut
    Apres moultes essais je récupère bien les infos pour une fiche complète (tab1:nom,prenom,tel - tab2:fournisseurs) mais pas toutes les infos de "fournisseursid" je pige pas comment faire la.

  5. #5
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Par défaut
    Bonjour ; avec une bonne jointure vous aurai les bonnes informations , post votre requête et en verra

  6. #6
    Membre confirmé Avatar de tyler94
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 126
    Par défaut
    Bonjour a toi,
    Voila :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $sql = "SELECT * from tb_consignes_temp
    INNER JOIN tb_clients_sites ON (tb_clients_sites.idclients_sites = tb_consignes_temp.clients_sites_id) 
    WHERE clients_sites_id = ".$id ;

  7. #7
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Par défaut
    Là ; je vous suit pas ..!!! ou est la table fournisseur ???? en plus ta une nouvelle table table consignes....

  8. #8
    Membre confirmé Avatar de tyler94
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 126
    Par défaut
    Les tables du premier post etait des tables plus compréhensible et des tables demo mais elle sont identique au vrai tables.

  9. #9
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Salut

    ... mais pas toutes les infos de "fournisseursid" je pige pas comment faire la.
    Le plus simple c'est de mettre le code que tu as fais (au moins le requête SQL), car là on pourra éventuellement apporter une correction.

    Toujours est il que pour récupérer les données sur 2 tables, il faut faire une jointure entre entre elles (INNER JOIN, ou LEFT JOIN, etc ...) et mettre dans la partie SELECT les données qu'on souhaite récupérer.


    Petite parenthèse au passage, il est préférable d'utiliser les mêmes noms de champs quand 2 tables sont liées, car les données sont les mêmes.
    Exemple :

    tab1
    id
    nom
    prenom
    tel
    id_fournisseur

    tab2
    id_fournisseur
    fournisseurs


    Ceci dit, j'ai un peu de mal à voir la différence qu'il y a au niveau de "tab1" entre le champ "id" et "id_fournisseur".
    Comme ça au feeling, cette donnée (id_fournisseur) serait redondante, donc théoriquement inutile, et par conséquent, ce serait le champ "id" (et les valeurs respectives) qui devraient être au niveau de la table "tab2".
    (Et pour "fournisseurs", c'est quoi ? le nom de l'entreprise ?)

    Comme ceci par exemple :
    tab1
    id
    nom
    prenom
    tel

    tab2
    id
    fournisseurs

    Une jointure sur ces 2 tables devraient fonctionner en exploitant le champ "id" (qui du coup devrait plutôt se nommer "id_fournisseur", ou id_contact).


    Enfin, c'est juste pour comprendre.

  10. #10
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Par défaut
    Re ; idem évite de nommer les tables tab1 et tab 2 de préférence table 1 : fournisseurs , table 2 : clients ou contactes....... sa serai clair.
    et pour les jointures voie du coté de ce lien http://sqlpro.developpez.com/cours/sqlaz/jointures/
    ensuite on verra

  11. #11
    Membre confirmé Avatar de tyler94
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 126
    Par défaut
    Citation Envoyé par RunCodePhp Voir le message
    Petite parenthèse au passage, il est préférable d'utiliser les mêmes noms de champs quand 2 tables sont liées, car les données sont les mêmes.
    Exemple :
    Décidément pas de bol on m'avais dit le contraire et d’après.


    Citation Envoyé par redoran Voir le message
    Re ; idem évite de nommer les tables tab1 et tab 2 de préférence table 1 : fournisseurs , table 2 : clients ou contactes....... sa serai clair.
    et pour les jointures voie du coté de ce lien http://sqlpro.developpez.com/cours/sqlaz/jointures/
    ensuite on verra
    Merci pour le lien même si cela fait 4/5 jours que je suis dessus


    Allez je replanche

  12. #12
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Citation Envoyé par redoran
    Là ; je vous suit pas ..!!!
    +1
    Citation Envoyé par tyler94
    Les tables du premier post etait des tables plus compréhensible et des tables demo mais elle sont identique au vrai tables.
    D'accord, mais du coup c'est nous qui pigeons plus grand chose maintenant.
    De plus toutes mes remarques tomberaient à l'eau. Pas cool

    A moins que sont projet soit du top secret défense, pourquoi ne pas fournir ses données réelles ?
    C'est quand même plus simple, non ?


    Il serait peut être bon de remettre tes structures de table et la requête.

  13. #13
    Membre confirmé Avatar de tyler94
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 126
    Par défaut
    Je ne pensais pas que c'etait utile de mettre les vrai table au vu de la complexité de la chose désolé.

    Voila mes vrais tables :

    tb_clients_sites
    - idclients_sites
    - clients_sites
    -------------------------
    tb_consignes_temp
    - idconsignes_temp
    - datej
    - datec
    - date_du
    - date_au
    - consignes_p
    - clients_sites_id

    Donc je récupère le "idclients_sites" et je doit affiché toutes les consignes qui correspond à cet ID de la table "tb_consignes_temp".

    J'espere que comme ca c'est plus clair car moi même me me perd ...

  14. #14
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Citation Envoyé par tyler94
    Décidément pas de bol on m'avais dit le contraire et d’après.
    Et d'après quoi, ou qui ?
    Je t'assure que c'est ainsi, en supposant qu'on parle bien de la même choses.
    Donc soit tu as mal compris les explications qu'on t'avais donné, soit pas d'bol effectivement, cette personne ne maitrise bien le SQL.

    En tout cas, ceux qui mettent des noms différents sur 2 champs en communs sur 2 tables qui servent justement à faire la jointure entre ces 2 tables (clé primaire -> clé étrangère) c'est qu'ils ne savent pas encore que les alias existent.
    Ils doivent avoir l'erreur typique comme : "Error, ambigous field ... blablabla".
    Ca fonctionne certes, mais ça rend le code moins compréhensible (intuitif).

  15. #15
    Membre confirmé Avatar de tyler94
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 126
    Par défaut
    T’inquiète je te fait confiance (plus qu'a ceux que j'ai demandé) lol je vais refaire cela au propre une fois que cette maudite page fonctionnera

    Merci du conseil

  16. #16
    Membre confirmé Avatar de tyler94
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 126
    Par défaut
    Punaise alors la je capte pas j'ai enfin réussi a faire ce que je souhaitais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     $select = "SELECT * FROM tb_consignes_temp 
      JOIN tb_clients_sites ON ( tb_clients_sites.idclients_sites =  tb_consignes_temp.clients_sites_id ) 
     WHERE clients_sites_id = '".$_GET['id']."';";
    Merci de vos conseil

  17. #17
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    En supposant que les champs "idclients_sites" et "clients_sites_id" sont d'un coté la clé primaire de l'autre la clé étrangère.
    (Vois tu déjà que le fait que leur noms soient différents, on est obligé de supposer que ...
    Imagine la même chose sur 100, 200 tables, voire plus
    c'est ingérable)


    La même requête mais en utilisant des alias
    (c tb_consignes_temp, s pour tb_clients_sites)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $sql = "SELECT s.clients_sites, c.idconsignes_temp, c.datej, etc ... les autres champs souhaités ...
    FROM tb_consignes_temp c
    INNER JOIN tb_clients_sites s ON c.clients_sites_id = s.idclients_sites
    WHERE c.clients_sites_id = ".$id;
    Cette requête me semble correcte.

    Pour revenir un peu concernant les alias, tu comprendras ici que ce ne sera pas un problème si ces 2 champs portaient le même nom, comme :
    clients_sites_id pour les 2 tables, car on "préfixe" champs et tables défini par leur alias (c et s).
    Ca veut dire que c'est valable pour n'importe quel champ, pas seulement pour les clé primaire et étrangère.
    Donc on ici avoir un champ "toto" dans ces 2 tables avec des valeurs différentes.
    La seule particularité dans cet exemple (vu que leur valeur sont différentes) , c'est qu'il faudra rajouter un autre alias au niveau de leur noms.
    Exemple :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT t1.toto AS toto_de_t1, t2.toto AS toto_de_t2
    FROM table1 AS t1
    INNER JOIN table2 AS t2 ON t1.id = t2.id
    On récupèrera les valeurs avec : "toto_de_t1" et "toto_de_t2" (et non plus "toto").

    Le seul inconvénient qu'il peu avoir lorsqu'on a des noms communs, c'est de ne plus pouvoir faire des SELECT *, car MySQL va détecter les ambiguïtés sur ces noms là.
    Mais comme faire des SELECT * ce n'est pas une manière correcte de faire du SQL, on ne le fait pas, donc il n'y plus de problème.



    Pour revenir à ta requête.
    Si tu n'obtiens pas toutes les données que tu veux, alors faudrait essayer un LETF JOIN à la place de INNER JOIN pour voir.
    As tu essayé la requête dans PhpMyAdmin ?

  18. #18
    Membre confirmé Avatar de tyler94
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 126
    Par défaut
    Merci au moins quelques choses de clair la, j'avoue comprendre un peu mieu car j'ai vraiment du mal avec les jointures.

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

Discussions similaires

  1. Plusieur requete sql pour un rapport
    Par dollark1K dans le forum iReport
    Réponses: 3
    Dernier message: 28/05/2009, 10h44
  2. requete sql pour faire un classement
    Par beezee dans le forum Langage SQL
    Réponses: 2
    Dernier message: 04/03/2006, 13h03
  3. Requete sql pour création de table dans une base access
    Par Ben156 dans le forum Bases de données
    Réponses: 1
    Dernier message: 17/01/2006, 22h12
  4. Requete SQL pour Access
    Par heraieros dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 13/01/2006, 14h15
  5. Réponses: 7
    Dernier message: 26/09/2005, 17h50

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