[PHP] Requête sql

Voir le sujet précédent Voir le sujet suivant Aller en bas

resolu [PHP] Requête sql

Message  #jim le Ven 26 Fév 2010, 22:01

Bonsoir,

Dans le td4 il nous était demandé d'effectuer différentes requêtes sur base des jointures, mais je bloque sur l'une d'elle:

Sélectionner les contacts ayant plus d'une adresse.

Il y a une 3 tables: contact(contact_id,family_name), address(address_id) et la table faisant la relation entre ces 2 premières: live(contact_id,address_id)

Il n'y a pas de sujets sur le php/sql, mais peut-être quelqu'un peut-il m'apporter de l'aide? (j'ai horreur de bloquer sur un truc :/)


Dernière édition par #jim le Dim 28 Fév 2010, 17:43, édité 1 fois

#jim

Nombre de messages : 6
Prénom : jimmy
Date d'inscription : 05/02/2010

Revenir en haut Aller en bas

resolu Re: [PHP] Requête sql

Message  Wark le Ven 26 Fév 2010, 23:51

Code:
SELECT *
FROM live
JOIN contact ON contact.contact_id = live.contact_id
JOIN adresse ON adress_id = live.adress_id

Si mes souvenirs sont exacts :p

Wark

Nombre de messages : 682
Age : 29
Prénom : Cédric
Statut : Diplômé 2010
Localisation : Braine l'alleud
Date d'inscription : 04/02/2008

Revenir en haut Aller en bas

resolu Re: [PHP] Requête sql

Message  #jim le Sam 27 Fév 2010, 00:17

Merci pour ta réponse! Wink
Pour la jointure je pense que c'est bon, mais la ca va tout afficher non? Ou alors je ne comprend pas comment il va "trier" seulement ceux qui ont plusieurs adresses... :/

#jim

Nombre de messages : 6
Prénom : jimmy
Date d'inscription : 05/02/2010

Revenir en haut Aller en bas

resolu Re: [PHP] Requête sql

Message  aro le Sam 27 Fév 2010, 09:36

Wark a écrit:
Code:
SELECT *
FROM live
JOIN contact ON contact.contact_id = live.contact_id
JOIN adresse ON adress_id = live.adress_id
1. Bof pour l'*, pas besoin de toutes ces colonnes en double.
2. En imaginant que address_id dans live fait partie de la clé primaire, ne peut donc pas être NULL et correspond toujours à une valeur dans address, la deuxième jointure ne sert à rien. En fait, s'il faut seulement les id des contacts, même la première n’est pas nécessaire et live suffit.
3. Pour ne garder que ceux qui ont plusieurs adresses, ajouter une clause GROUP BY et une clause HAVING avec la fonction d’agrégation COUNT dans la condition semble le bon plan. Smile

aro

Nombre de messages : 557
Prénom : Anne
Statut : Prof
Date d'inscription : 06/09/2008

Revenir en haut Aller en bas

resolu Re: [PHP] Requête sql

Message  Wark le Sam 27 Fév 2010, 11:25

J'avais omis la 3ème partie.

Maintenant, je ne donne pas de réponses toutes faites non plus ^^ L'étudiant a aussi sa responsabilité dans l'affinage de son code. :p

Wark

Nombre de messages : 682
Age : 29
Prénom : Cédric
Statut : Diplômé 2010
Localisation : Braine l'alleud
Date d'inscription : 04/02/2008

Revenir en haut Aller en bas

resolu Re: [PHP] Requête sql

Message  #jim le Sam 27 Fév 2010, 12:34

Encore merci pour vos réponses et oui wark je ne cherche pas à recevoir un travail prémaché, je veux surtout comprendre Wink

Alors voici ce que j'ai essayé jusqu'à présent:

SELECT contact_id
FROM contacts, live
WHERE contacts.contact_id=live.contact_id
GROUP BY live.contact_id
HAVING COUNT(*) > 1

J'ai testé dans phpmyadmin, et cela ne semble pas fonctionner: "Vous devez choisir au moins une colonne à afficher" > Je pense avoir préciser la colonne (contact_id), quelqu'un comprend? :/

#jim

Nombre de messages : 6
Prénom : jimmy
Date d'inscription : 05/02/2010

Revenir en haut Aller en bas

resolu Re: [PHP] Requête sql

Message  Wark le Sam 27 Fév 2010, 13:23

Tu n'as pas spécifié depuis quelle table tu voulais ton contact_id. :-)

Wark

Nombre de messages : 682
Age : 29
Prénom : Cédric
Statut : Diplômé 2010
Localisation : Braine l'alleud
Date d'inscription : 04/02/2008

Revenir en haut Aller en bas

resolu Re: [PHP] Requête sql

Message  aro le Sam 27 Fév 2010, 13:26

#jim a écrit:SELECT contact_id
FROM contacts, live
WHERE contacts.contact_id=live.contact_id
GROUP BY live.contact_id
HAVING COUNT(*) > 1

J'ai testé dans phpmyadmin, et cela ne semble pas fonctionner: "Vous devez choisir au moins une colonne à afficher" > Je pense avoir préciser la colonne (contact_id), quelqu'un comprend? :/
Comment veux-tu qu’il sache s’il s’agit du contact_id dans live ou de celui dans contacts après le SELECT ?
Ceci dit, tu n’as pas besoin de contacts et donc il n’y aura plus d’ambiguïté si tu enlèves cette table et si tu enlèves le WHERE (et tant que tu y es tu peux aussi enlever live. partout avant contact_id puisqu’il n’y aura plus qu’un contact_id).

aro

Nombre de messages : 557
Prénom : Anne
Statut : Prof
Date d'inscription : 06/09/2008

Revenir en haut Aller en bas

resolu Re: [PHP] Requête sql

Message  #jim le Sam 27 Fév 2010, 13:44

Oui c'est vrai que si je ne voulais que le contact_id, je pourrai simplifier, mais je pourrai par la suite vouloir son nom par exemple.
J'avais aussi essayer de préciser dans quelle table il fallait chercher le contact_id:

SELECT contacts.contact_id
FROM contacts, live
WHERE contacts.contact_id=live.contact_id
GROUP BY live.contact_id
HAVING COUNT(*) > 1

ou

SELECT contacts.family_name
FROM contacts, live
WHERE contacts.contact_id=live.contact_id
GROUP BY live.contact_id
HAVING COUNT(*) > 1

Mais j'ai toujours droit au même message "Vous devez choisir au moins une colonne à afficher" :/

#jim

Nombre de messages : 6
Prénom : jimmy
Date d'inscription : 05/02/2010

Revenir en haut Aller en bas

resolu Re: [PHP] Requête sql

Message  aro le Sam 27 Fév 2010, 15:00

#jim a écrit:Mais j'ai toujours droit au même message "Vous devez choisir au moins une colonne à afficher" :/
Dans les deux commandes, tu as une colonne après le SELECT qui n'est pas reprise après le GROUP BY, ce qui n'est pas permis car si la colonne n'est pas après le GROUP BY, il pourrait (ce ne sera pas le cas ici mais, ce n'est quand même pas permis) y avoir plusieurs valeurs différentes pour cette colonne par groupe.
Pourquoi la vieille syntaxe avec un WHERE plutôt qu'un JOIN ?

aro

Nombre de messages : 557
Prénom : Anne
Statut : Prof
Date d'inscription : 06/09/2008

Revenir en haut Aller en bas

resolu Re: [PHP] Requête sql

Message  #jim le Sam 27 Fév 2010, 19:44

aro a écrit:
Pourquoi la vieille syntaxe avec un WHERE plutôt qu'un JOIN ?

Une vieille habitude sans doute, l'utilisation du where est à éviter? (dépassé?)

Merci pour les explications, j'ai donc essayé:

Code:
SELECT contacts.contact_id
FROM contacts, live
WHERE contacts.contact_id=live.contact_id
GROUP BY contacts.contact_id
HAVING COUNT(*) > 1

et

Code:
SELECT live.contact_id
FROM contacts, live
WHERE contacts.contact_id=live.contact_id
GROUP BY live.contact_id
HAVING COUNT(*) > 1

Mais je reste sur le même carreau, je vais continuer de chercher, encore merci pour votre soutien ca fait plaisir Wink

#jim

Nombre de messages : 6
Prénom : jimmy
Date d'inscription : 05/02/2010

Revenir en haut Aller en bas

resolu Re: [PHP] Requête sql

Message  aro le Sam 27 Fév 2010, 21:16

#jim a écrit:Une vieille habitude sans doute, l'utilisation du where est à éviter? (dépassé?)
Tu ne dois pourtant pas être si vieux, le JOIN est standard depuis SQL2 (1992) Wink
Tes commandes sont correctes. Donc si tu restes sur le carreau, le problème est ailleurs. Du style,
- qu’est-ce qui est vraiment reçu par le SGDB (MySQL ?)
- est-ce qu’il n’y a pas un problème de minuscules/majuscules,…
- est-ce qu’ajouter un espace avant le FROM change qq chose,...
Et si le problème est ailleurs, tu devrais avoir le même message en supprimant tout à partir de la virgule :
Code:
SELECT contacts.contact_id
FROM contacts

aro

Nombre de messages : 557
Prénom : Anne
Statut : Prof
Date d'inscription : 06/09/2008

Revenir en haut Aller en bas

resolu Re: [PHP] Requête sql

Message  Wark le Sam 27 Fév 2010, 22:58

Dans ton énoncé original, tu donnes une table "contact" et dans ta requête, tu notes "contacts".

Dans quel post est l'erreur ?

Wark

Nombre de messages : 682
Age : 29
Prénom : Cédric
Statut : Diplômé 2010
Localisation : Braine l'alleud
Date d'inscription : 04/02/2008

Revenir en haut Aller en bas

resolu Re: [PHP] Requête sql

Message  #jim le Dim 28 Fév 2010, 17:13

Un grand merci à vous, mon problème est enfin résolu, aro tu avais raison, j'ai essayé une simple requête style SELECT * FROM contacts, et j'avais toujours la même erreur...
Jusqu'à présent j'avais testé mes requêtes sql dans l'onglet "requetes" de phpmyadmin, mais en les testant dans l'onglet "SQL" j'obtiens enfin les résultats voulus! Razz

(Wark>> l'erreur se trouvait dans mon premier post)

Encore merci à vous Wink

#jim

Nombre de messages : 6
Prénom : jimmy
Date d'inscription : 05/02/2010

Revenir en haut Aller en bas

resolu Re: [PHP] Requête sql

Message  Contenu sponsorisé Aujourd'hui à 08:43


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum