{MySQL} Requête simultanée sur deux champs

Résolu/Fermé
Youplah - 15 déc. 2009 à 16:02
 Youplah - 22 déc. 2009 à 16:43
Bonjour,

J'ai un petit souci, peut être l'un parmi vous pourra m'aider à le résoudre :)

J'ai une table accounts contenant ces champs :
- id_account
- nom
- prenom

J'ai une table contacts contenant ceux-ci :
- id_contact
- id_demande
- id_reponse

Je cherche à récupérer les noms et prénoms d'un membre dont l'id_account est 2, c'est à dire récupérer les membres qui sont en relation avec lui, qu'il soit en id_demande ou id_contact. J'ai tenté beaucoup de requêtes sans parvenir à en créer une simple et qui fonctionne.
J'en suis actuellement à ça :

SELECT `a`.`nom`, `a`.`prenom`
FROM `accounts` AS `a`
LEFT JOIN `contacts` AS `r` ON r.id_demande = a.id_account
LEFT JOIN `contacts` AS `f` ON f.id_reponse = a.id_account
WHERE (r.id_reponse = 2 AND r.id_demande <> 2) AND (f.id_demande = 2 AND f.id_reponse <> 2)

Avez vous une idée ?

Merci d'avance !
A voir également:

6 réponses

dam75 Messages postés 1041 Date d'inscription lundi 4 mai 2009 Statut Webmaster Dernière intervention 21 février 2023 67
16 déc. 2009 à 15:11
Euhhh ... si j'ai bien compris voila une idée ...
SELECT A.* FROM accounts A
INNER JOIN (
  SELECT IF(id_demande=2,id_reponse,IF(id_reponse=2,id_demande,0)) AS id_account FROM contacts
) TMP
ON (A.id_account = TMP.id_account)


Bon courage

EDIT : doc officielle sur le IF de MySQL, ca peut aider :)
http://dev.mysql.com/doc/refman/5.0/fr/control-flow-functions.html
2
Hello,

Désolé pour cette absence de quelques jours, la grippe A a eu raison de moi :/

1000 merci à toi ça marche parfaitement !

Je passe ce sujet à résolu ;)
0
Youplah > Youplah
22 déc. 2009 à 16:43
Bin non je passe pas à résolu parce que je peux plus, y'a plus le bouton...
0
angevences1 Messages postés 2 Date d'inscription jeudi 6 novembre 2008 Statut Membre Dernière intervention 15 décembre 2009
15 déc. 2009 à 16:49
je veux bien t'aider mais commence d'abord par me donner la règle de gestion de tes deux tables
0
toma_f_1 Messages postés 89 Date d'inscription dimanche 29 novembre 2009 Statut Membre Dernière intervention 16 décembre 2009 7
15 déc. 2009 à 16:51
Je cherche à récupérer les noms et prénoms d'un membre dont l'id_account est 2, c'est à dire récupérer les membres qui sont en relation avec lui

pas très claire ta question...
0
Bin heu... admettons il y a toto, tata et tutu sur le site, on a donc

id_account | nom
1              | toto
2              | tata
3              | tutu


Dans ma table contacts j'aurais ça
id_contact | id_demande | id_reponse
1              | 2                 | 3                // tata demande à tutu
2              | 1                 | 2                // toto demande à tata
3              | 1                 | 3                // toto demande à tutu


Si je cherche à récupérer tous les contacts de 2 (tata), je devrais retourner l'utilisateur 3 (tutu) et l'utilisateur 1 (toto).

C'est plus clair ? :)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
toma_f_1 Messages postés 89 Date d'inscription dimanche 29 novembre 2009 Statut Membre Dernière intervention 16 décembre 2009 7
16 déc. 2009 à 13:04
pourquoi pas un simple

select distinct a.* from accounts a, contacts c
where (c.id_contact = 2 and a.id_account = c.id_demande)
or (c.id_demande = 2 and a.id_account = c.id_contact)

à tester...

l'idée est la, mais je m'embrouille avec tes attributs ( id_contact, et surtout id_demande et id_reponse) à quoi servent-ils ?
0
moderno31 Messages postés 870 Date d'inscription mardi 23 juin 2009 Statut Membre Dernière intervention 8 août 2012 92
16 déc. 2009 à 20:05
CEtte demande en est où ?
Quand je lis
"Je cherche à récupérer les noms et prénoms d'un membre dont l'id_account est 2" il me parait clair que tu n'utilises qu'une table contact donc la requette suivante :
SELECT nom, prenom FROM accounts WHERE id_account = 2.

Sinon s'il te faut bien faire une jointure dans la table contacts, j'espère pour toi que les valeurs des id account ont bien des correspondances dans la table contacts. Car d'après ce que je vois ta jointure n'apporte aucune info à ta recherche initiale.

De plus je ne vois pas à quel moment tu considère qu'un contact correpond à un compte..
0