Problème de sintaxe d'une requete imbriquée
sebshiva
-
sebshiva Messages postés 198 Statut Membre -
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.
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.
A voir également:
- Problème de sintaxe d'une requete imbriquée
- Liste imbriquée excel - Guide
- Quelle requête écrire pour demander au moteur de recherche de présenter de préférence les pages web traitant de tennis mais pas de tennis de table ✓ - Forum Java
- Quelle requête écrire pour demander au moteur de recherche de présenter de préférence les pages web traitant de tennis mais pas de tennis de table ? ✓ - Forum Access
- Requête SELECT entre une table et une requête existante ✓ - Forum Access
- Probleme de requête - Forum Access
4 réponses
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
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
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
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
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
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
Bonjour,
Le code devrait être a peu près le suivant (basé sur php)
A plus
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
Personne??
Ma faute est trop bête?? :(
~~(-_-)~~