MySQL utilisation de condition IF/THEN/...

Fermé
Kergad - 29 oct. 2010 à 02:04
 swed - 31 oct. 2010 à 17:47
Bonjour,

Voila je dois faire une coraletion avec des entrées de ma table. Je cherche à identifier les personnes qui se sont MUTUELLEMENT désignées avec un choix (1:sympa, 2:nul).
Par soucis de rapidité j'aimerais utiliser qu'une requete SQL et non du PHP avec traitement de tableau.

Illustration:

id|source|destinataire|choix|

1|user1|user2|choix2|
2|user1|user3|choix1|
3|user2|user1|choix2|

J'aimerais donc extraire les ligne 1 et 3

J'ai tout essayer, JOIN, DICTINCT, ... mais rine à faire

J'en viens à me demandé si j'ai bien pensé ma DB :/

Je pensais utiliser des condition à la sauce PL/SQL, mais je ne mis connais pas trop :/

Merci à tous

A voir également:

7 réponses

Bonjour,

Si j'ai bien compris ce que tu veux :
SELECT * FROM TABLE REF
WHERE NOT EXIST
( SELECT 1 FROM TABLE COMP
WHERE REF.SOURCE=COMP.DEST
AND REF.DEST=COMP.SOURCE )

Ca devrait fonctionner...

Mais une table séparée pour les choix serait peut-être plus appropriée, plutot qu'un champ String contenant une liste.
Si un jour tu souhaites faire des conditions sur les choix, ca va etre compliqué comme ca...

Cordialement, M.
2
Bonjour,

Soit j'ai pas compris, ou soit c'est tout simple avec une bête jointure ; par exemple :

SELECT REFERENCE.*
FROM TA_TABLE REFERENCE, TA_TABLE COMPARAISON
WHERE
REFERENCE.SOURCE = COMPARAISON.DESTINATAIRE
AND COMPARAISON.SOURCE = REFERENCE.DESTINATAIRE
AND REFERENCE.CHOIX = COMPARAISON.CHOIX

J'ai pas testé mais ca me semble correspondre à ce que tu souhaites.

Cordialement, M.
2
Bonjour,

Tu n'as pas besoin de deux tables.
Dans le FROM, tu peux mettre deux fois la même table avec un alias.

Par exemple, en admettant que tu conserves qu'une table nommée 'table' :

SELECT REF.choix AS Choix1, COMP.choix AS Choix2
FROM table REF, table COMP
WHERE REF.uid_source = COMP.uid_dest
AND REF.uid_dest = COMP.uid_source

Non ?

Cordialement, M.
2
Merci swed,

effectivement avec une jointure j'arrive à avoir mon résultat, mais je suis obliger d'utiliser deux tables :/

Pour l instant je crée une table temporaire avec que user1 et une autre qu'avec user2, puis ensuite j'applique ma jointure.

SELECT Table1.choix AS Choix1, Table2.choix AS Choix2
FROM Table1, Table2
WHERE Table1.uid_source = Table2.uid_dest
AND Table1.uid_dest = Table2.uid_source


es que ce système n'es pas trop lourd en traitement ?
car il devrais y avoir se genre de requête toutes les 5min sur tous mes utilisateurs :/

Ou alors peut être il y a moyen de trouvé une solution qu'en une seul étape?

Merci encore
0

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

Posez votre question
Encore merci Swed, cela marche impec. Effectivement je n'avais pas pensé à utiliser des alias pour les table.
Maintenant je suis bloqué a un autre problème, car je ne voudrais afficher QUE les utilisateur qui ont émis un choix sur un autre utilisateur et qui n'ont pas encore eu de réponse (ex. user4).

id_match 	source 	dest 	choix 	
        14 	user4 	user1 	1;2;5;7; 	
 	15 	user3 	user1 	1;2;7; 	
 	10 	user1 	user2 	1;3;5;7;9 
 	11 	user2 	user1 	1;9;   	
 	12 	user1 	user3 	2;4;5 


Je pensais utiliser cette commande :
SELECT REF.choix AS Choix1, COMP.choix AS Choix2 
FROM table REF, table COMP 
WHERE REF.uid_source = '".$_GET['uid']."'
AND COMP.uid_dest = '".$_GET['uid']."'
AND REF.uid_source = COMP.uid_dest 
AND REF.uid_dest != COMP.uid_source 


Mais cela m'affiche trop de données

Je pense que je me suis embrouillé quelque part, mais je n'arrive pas a m'en sortir :/
0
Encore merci, la requête est parfaite, tu gères ;)

Effectivement, je pense devoir créer ma table de choix.
Mais je me demandais, car mes souvenir de DSL un peu troublés, mais avec des clé primaire et étrangère est-il possible de lier des table?

Je pense utiliser l'id du match comme clé étrangère dans ma table choix

Exemple :

Table match
id_match;source;dest;id_choix


Table Choix fait pas les utilisateur
id_choixUSER ; #id_match ; choix 1 ; choix 2 ; choix 3 (type BOOL)...


Table désignation du choix
id_choix;description;


Es que cette composition semble correcte?
J ai encore un peu de mal à définir à quoi sert réellement les clé étrangère :/
0
Bonjour,
Yes, ca me semble correct.
Cordialement, M.
0