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

Fermé
sebshiva - 16 mars 2009 à 23:16
sebshiva Messages postés 194 Date d'inscription lundi 16 mars 2009 Statut Membre Dernière intervention 17 juin 2010 - 18 mars 2009 à 17:12
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 194 Date d'inscription lundi 16 mars 2009 Statut Membre Dernière intervention 17 juin 2010 10
17 mars 2009 à 15:50
up!
0
sebshiva Messages postés 194 Date d'inscription lundi 16 mars 2009 Statut Membre Dernière intervention 17 juin 2010 10
17 mars 2009 à 19:37
up
0
sebshiva Messages postés 194 Date d'inscription lundi 16 mars 2009 Statut Membre Dernière intervention 17 juin 2010 10 > sebshiva Messages postés 194 Date d'inscription lundi 16 mars 2009 Statut Membre Dernière intervention 17 juin 2010
18 mars 2009 à 13:37
up
0
sebshiva Messages postés 194 Date d'inscription lundi 16 mars 2009 Statut Membre Dernière intervention 17 juin 2010 10 > sebshiva Messages postés 194 Date d'inscription lundi 16 mars 2009 Statut Membre Dernière intervention 17 juin 2010
18 mars 2009 à 14:07
up....
Personne??
Ma faute est trop bête?? :(

~~(-_-)~~
0
Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 1 389
18 mars 2009 à 14:29
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 194 Date d'inscription lundi 16 mars 2009 Statut Membre Dernière intervention 17 juin 2010 10
18 mars 2009 à 14:52
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 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 1 389
18 mars 2009 à 15:41
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 194 Date d'inscription lundi 16 mars 2009 Statut Membre Dernière intervention 17 juin 2010 10
18 mars 2009 à 15:43
Volontier!
0
Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 1 389
18 mars 2009 à 17:02
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 194 Date d'inscription lundi 16 mars 2009 Statut Membre Dernière intervention 17 juin 2010 10
18 mars 2009 à 17:12
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