Problème de sintaxe d'une requete imbriquée

sebshiva -  
sebshiva Messages postés 198 Statut Membre -
Bonjour,
Malgré plusieurs heures de recherche, je ne trouve pas comment faire fonctionner cette requête mysql...

SELECT tel.tel_tel, tel.type_tel, adresse.nom_adresse, adresse.ville_adresse
FROM tel,adresse WHERE (tel.id_contact OR adresse.id_contact) IN
(SELECT contact.id_contact,contact.nom_contact, contact.prenom_contact
FROM contact where nom_contact LIKE "%'.$_POST['nom'].'%" OR prenom_contact like "%'.$_POST['nom'].'%")

Vous remarquez le PHP mais le problème ne vient pas de là...
L'erreur est la suivante : Warning : Operand should contain 1 column(s)

J'ai essayé plein de combinaisons... sans résultat.. à part d'autres messages d'erreur...
Les tables : une table contact, avec une clé primaire id_contact (et un champs nom etc..), une table adresse avec un champ id_contact (pour une clé externe et un champ ville etc..) un contact pouvant avoir plusieurs adresse et une table tel avec également un champ id_contact (pour une clé externe et un champs type genre domicile etc...), un contact pouvant avoir plusieurs téléphones, adresses...
Le but étant de récupérer dans un tableau toutes ces informations sans avoir de "doublons" dans ce tableau (pas autant de ligne pour un contact que de téléphone par ex.)

Merci pour vos lumières, là, j'y vois plus rien.

4 réponses

sebshiva Messages postés 198 Statut Membre 10
 
up!
0
sebshiva Messages postés 198 Statut Membre 10
 
up
0
sebshiva Messages postés 198 Statut Membre 10 > sebshiva Messages postés 198 Statut Membre
 
up
0
sebshiva Messages postés 198 Statut Membre 10 > sebshiva Messages postés 198 Statut Membre
 
up....
Personne??
Ma faute est trop bête?? :(

~~(-_-)~~
0
Christounet Messages postés 1266 Statut Membre 1 393
 
Bonjour,

Avant de pouvoir de proposer une solution, voyons si j'ai bien compris ton problème. Si tu as un contact disons Dupont ayant comme id le n° 10, ayant deux n° de téléphones et trois adresses, tu veux avoir sur une seule ligne le résultat suivant:
10 , Dupont, Jean , téléphone1, type1 , téléphone2, type2, adresse1, ville1 , adresse2, ville2 , adresse3, ville3

C'est bien ça ?

A plus
0
sebshiva Messages postés 198 Statut Membre 10
 
Exactement ;)
Merci de te pencher sur mon cas.
J'aurais pu faire d'autres select dans le mysql_fetch_array... ça ne me parait pas propre du tout (et bien trop gourmand en ressource suivant le nombre de resultat dans un autre cas) et je suis convaincu que c'est faisable en une requête... J'essaie d'apprendre...
Merci encore pour ton aide
0
Christounet Messages postés 1266 Statut Membre 1 393
 
Bonjour,

Obtenir ce résultat avec une seule requête ne serait possible que si chaque contact n'avait qu'un seul n° de téléphone et une seule adresse, sinon tu obtiendras le résultat suivant:
10 , Dupont, Jean , téléphone1, type1 , adresse1, ville1
10 , Dupont, Jean , téléphone2, type2 , adresse2, ville2
10 , Dupont, Jean , adresse3, ville3

En faisant des requêtes imbriquées, tu dois arriver sans problème au résultat voulu et je ne pense pas que cela devrait avoir un impact sur le temps de réponse ou les ressources utilisées. Si tu veux je peux te donner les requêtes que j'utiliserais.

A plus
0
sebshiva Messages postés 198 Statut Membre 10
 
Volontier!
0
Christounet Messages postés 1266 Statut Membre 1 393
 
Bonjour,

Le code devrait être a peu près le suivant (basé sur php)
$resultat = mysql_query("SELECT id_contact , nom_contact, prenom_contact FROM contact where nom_contact LIKE \"%".$_POST['nom']."%\" OR prenom_contact like \"%".$_POST['nom']."%\"") ;

while ($contact = mysql_fetch_array($resultat) )
{
  $personne = $contact['id_contact'] . ' ,' .  $contact['nom_contact'] . ',' . $contact['prenom_contact'];

 $resultat1 = mysql_query("SELECT tel_tel, type_tel FROM tel WHERE id_contact = " .$contact['id_contact']);

 while ($tel = mysql_fetch_array($resultat1) )
 {
    $personne = $personne . ',' . $tel['tel_tel'] . ',' . $tel['type_tel'];
 }

 $resultat1 = mysql_query("SELECT nom_adresse, ville_adresse FROM adresse WHERE id_contact = " .$contact['id_contact']);

 while ($adresse = mysql_fetch_array($resultat1) )
 {
    $personne = $personne . ',' . $adresse['nom_adresse'] . ',' . $adresse['ville_adresse'];
 }

echo $personne;

}


A plus
0
sebshiva Messages postés 198 Statut Membre 10
 
Merci! Mais c'est exactement ce que je ne voulais pas faire...
Si il y a disons... 100 réponses...300 requêtes... c'est une catastrophe!
Je cherche donc la syntaxe pour mettre tout ça dans une seule requête.
Merci quand même
0