Page 1 sur 1

Recherche sur plusieurs tables

Posté : 13 mai 2008, 10:45
par keitaro_bzh
BOnjour,

Je débute sur PHP/MYSQL et je suis en train de me constituer une petite base de donnée. Mais j'arrive à un problème et ma tête me fait trop mal pour y arriver tout seul.

Je possède plusieurs tables. Dans la première, j'ai des coordonnées de mes contacts, et dans une autre, j'ai les informations concernant les contacts.

Ma requete est simple, je voudrais faire une commande me permettant de selectionner que certains contacts (genre, ceux qui habite dans tel ville et qui ont 30ans).

Pour le moment, j'essaie un truc du style:

$recherche =mysql_query ("SELECT * FROM contact,info WHERE cp = 35400 AND age = 30", $connexion);

table contact contient le champ cp
table info contient le champ age

Si quelqu'un peut m'aiguiller, ce serait gentil.

Merci d'avance

Posté : 13 mai 2008, 12:24
par katagoto
Tu aurais dût poster dans Débutant PHP et pourquoi tu ne fais pas une jointure ???

Posté : 13 mai 2008, 12:40
par caroube
Au niveau de la conception de ta base de données, il n'est pas nécessaire de scinder en deux tables des informations qui sont uniques au niveau d'un enregistrement (un code postal est unique, tout comme un âge est unique). C'est même plutôt déconseillé.
L'âge de ton contact est à ranger dans la même table que son nom, son adresse, ...
Par contre, si tu as des informations qui sont multiples pour ton contact (par exemple, les réunions que tu as eu avec lui), il faut créer une deuxième table

Code : Tout sélectionner

contact reunion ----------------------- id_ctc id_reu nom id_ctc prenom ordre_du_jour ... date_reu
Pour accéder à toutes les réunions d'un contact, il faudra donc que tu fasses une jointure

Code : Tout sélectionner

select c.nom, r.ordre_du_jour from contact as c, reunion as r where c.id_ctc = r.id_ctc

Posté : 13 mai 2008, 13:12
par keitaro_bzh
Merci pour vos réponses...

Mais j'ai une petite question, comment sélectionnez uniquement les rendez vous qu'il y a eu après tel date ?

Car dans ta solution tu affiches tous les rendez vous.

Posté : 13 mai 2008, 13:47
par caroube

Code : Tout sélectionner

select c.nom, r.ordre_du_jour from contact as c, reunion as r where c.id_ctc = r.id_ctc and r.date_reu >= to_date('12/05/2008') and c.nom like 'D%' and c.age between 30 and 45 order by r.date_reu desc
tous les rdv à partir du 12 mai, pour les personnes dont l'initiale du nom est D et qui ont entre 30 et 45 ans, classés par ordre chronologique inverse

Posté : 14 mai 2008, 10:46
par keitaro_bzh
Merci Caroube, t'es un dieu .. mon nouveau dieu du PHP!! :)

Ca fonctionne d'enfer! ;)