Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/12/2011, 11h44   #1
Invité régulier
 
Avatar de tyler94
 
Inscription : avril 2009
Messages : 120
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 120
Points : 7
Points : 7
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.
tyler94 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/12/2011, 12h57   #2
Membre expérimenté
 
Avatar de redoran
 
Homme
Developpeur- Amateur
Inscription : juin 2010
Messages : 981
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 40
Localisation : Algérie

Informations professionnelles :
Activité : Developpeur- Amateur
Secteur : Santé

Informations forums :
Inscription : juin 2010
Messages : 981
Points : 572
Points : 572
Envoyer un message via Skype™ à redoran
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.
redoran est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/12/2011, 16h40   #3
Invité régulier
 
Avatar de tyler94
 
Inscription : avril 2009
Messages : 120
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 120
Points : 7
Points : 7
re , je pense que tu as compris oui
tyler94 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2011, 12h28   #4
Invité régulier
 
Avatar de tyler94
 
Inscription : avril 2009
Messages : 120
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 120
Points : 7
Points : 7
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.
tyler94 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2011, 12h49   #5
Membre expérimenté
 
Avatar de redoran
 
Homme
Developpeur- Amateur
Inscription : juin 2010
Messages : 981
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 40
Localisation : Algérie

Informations professionnelles :
Activité : Developpeur- Amateur
Secteur : Santé

Informations forums :
Inscription : juin 2010
Messages : 981
Points : 572
Points : 572
Envoyer un message via Skype™ à redoran
Bonjour ; avec une bonne jointure vous aurai les bonnes informations , post votre requête et en verra
redoran est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2011, 12h54   #6
Invité régulier
 
Avatar de tyler94
 
Inscription : avril 2009
Messages : 120
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 120
Points : 7
Points : 7
Bonjour a toi,
Voila :

Code :
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 ;
tyler94 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2011, 13h04   #7
Membre expérimenté
 
Avatar de redoran
 
Homme
Developpeur- Amateur
Inscription : juin 2010
Messages : 981
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 40
Localisation : Algérie

Informations professionnelles :
Activité : Developpeur- Amateur
Secteur : Santé

Informations forums :
Inscription : juin 2010
Messages : 981
Points : 572
Points : 572
Envoyer un message via Skype™ à redoran
Là ; je vous suit pas ..!!! ou est la table fournisseur ???? en plus ta une nouvelle table table consignes....
redoran est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2011, 13h06   #8
Invité régulier
 
Avatar de tyler94
 
Inscription : avril 2009
Messages : 120
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 120
Points : 7
Points : 7
Les tables du premier post etait des tables plus compréhensible et des tables demo mais elle sont identique au vrai tables.
tyler94 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2011, 13h06   #9
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 727
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 727
Points : 3 294
Points : 3 294
Salut

Citation:
... 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.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2011, 13h11   #10
Membre expérimenté
 
Avatar de redoran
 
Homme
Developpeur- Amateur
Inscription : juin 2010
Messages : 981
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 40
Localisation : Algérie

Informations professionnelles :
Activité : Developpeur- Amateur
Secteur : Santé

Informations forums :
Inscription : juin 2010
Messages : 981
Points : 572
Points : 572
Envoyer un message via Skype™ à redoran
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
redoran est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2011, 13h13   #11
Invité régulier
 
Avatar de tyler94
 
Inscription : avril 2009
Messages : 120
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 120
Points : 7
Points : 7
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
tyler94 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2011, 13h19   #12
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 727
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 727
Points : 3 294
Points : 3 294
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.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2011, 13h28   #13
Invité régulier
 
Avatar de tyler94
 
Inscription : avril 2009
Messages : 120
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 120
Points : 7
Points : 7
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 ...
tyler94 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2011, 13h34   #14
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 727
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 727
Points : 3 294
Points : 3 294
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).
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2011, 13h38   #15
Invité régulier
 
Avatar de tyler94
 
Inscription : avril 2009
Messages : 120
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 120
Points : 7
Points : 7
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
tyler94 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2011, 13h55   #16
Invité régulier
 
Avatar de tyler94
 
Inscription : avril 2009
Messages : 120
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 120
Points : 7
Points : 7
Punaise alors la je capte pas j'ai enfin réussi a faire ce que je souhaitais :

Code :
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
tyler94 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2011, 14h12   #17
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 727
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 727
Points : 3 294
Points : 3 294
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 :
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 :
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 ?
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2011, 14h15   #18
Invité régulier
 
Avatar de tyler94
 
Inscription : avril 2009
Messages : 120
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 120
Points : 7
Points : 7
Merci au moins quelques choses de clair la, j'avoue comprendre un peu mieu car j'ai vraiment du mal avec les jointures.
tyler94 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h08.


 
 
 
 
Partenaires

Hébergement Web