2009-06-04 7 views
0

J'ai un problème pour créer une requête dans MySQL. J'ai la requête suivante:Comment puis-je composer cette requête?

SELECT 
    tm.ticket_message_id, 
    tm.ticket_id, 
    tm.message_from, 
    tm.message_to, 
    t.member_id, 
    t.member_to 
FROM 
    `ticket_messages` AS tm 
    INNER JOIN `tickets` AS t 
    ON (t.ticket_id = tm.ticket_id) 

La clé primaire de la table ticket_messages est ticket_message_id. Pour tickets, la clé primaire est ticket_id.

À l'heure actuelle, en raison d'une erreur dans la logique d'un programme, la valeur ticket_messages.message_from est toujours 0. C'est faux.

Maintenant, je dois remédier à cette situation et définir tm.message_to-tm.message_to ou t.member_id, en fonction de la condition suivante:

On suppose ID_1 et ID_2 sont deux pièces d'identité. Si tm.message_from et t.member_to sont tous les deux égaux à ID_1 et t.member_id est égal à ID_2, la valeur de tm.message_from doit être affectée de la valeur t.member_id.

Si tm.message_from et t.member_id sont égaux à ID_2 et t.member_to est égal à ID_1, la valeur pour tm.message_from doit être attribuée la valeur t.member_to.

Comment réparer ma table avec une requête MySQL?

+0

Note aux autres éditeurs: Je vais essayer de nettoyer celui-ci. – Welbog

+0

Très bien, j'ai fini de l'éditer. J'espère que je n'ai perdu aucune information. Je ne suis pas 100% clair sur les conditions que kofto4ka a listées, donc je les ai laissées plus ou moins comment je les ai trouvées. – Welbog

+0

Merci! Incroyable :) – user52005

Répondre

3

Utilisez l'instruction géniale "CASE".

UPDATE `ticket_messages` AS tm, `tickets` AS t 
SET tm.message_from = CASE 
    WHEN tm.message_from == t.member_id THEN t.member_id 
    ELSE t.member_to 
END 
WHERE (t.ticket_id = tm.ticket_id) 
+1

Pas de "UPDATE ... FROM" dans mysql. – Tomalak

+0

Je pense que la bonne syntaxe suivante est: MISE À JOUR 'ticket_messages' tm INNER JOIN' tickets' AS t ON (t.ticket_id = tm.ticket_id) SET tm.message_from = CAS QUAND tm.message_from = t.member_id PUIS t.member_id ELSE t.member_to END Mais cela n'affecte pas les lignes. – user52005

+0

Bon point. Je l'ai mis à jour à ce que je pense être la bonne syntaxe mysql. Je suis habitué à penser à SqlServer. – Talljoe

Questions connexes