2009-06-04 18 views
0

Ich habe ein Problem mit einer Abfrage in MySQL. Ich habe die folgende Abfrage:Wie kann ich diese Abfrage erstellen?

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) 

der Primärschlüssel der Tabelle ticket_messagesticket_message_id ist. Für tickets ist der Primärschlüssel ticket_id.

Gerade jetzt, aufgrund eines Fehlers in einer Logik des Programms ist der Wert in ticket_messages.message_from immer 0. Das ist falsch.

Jetzt muss ich diese Situation beheben und setzen tm.message_to-tm.message_to oder t.member_id, abhängig von den folgenden Bedingungen:

Angenommen ID_1 und ID_2 sind zwei IDs. Wenn tm.message_from und t.member_to beide gleich ID_1 sind und t.member_id gleich ID_2 ist, muss der Wert für tm.message_from dem Wert in t.member_id zugewiesen werden.

Wenn tm.message_from und t.member_id gleich sind ID_2 und t.member_to-ID_1 gleich ist, dann wird der Wert für tm.message_from muss den Wert in t.member_to zugeordnet werden.

Wie kann ich meine Tabelle mit einer MySQL-Abfrage beheben?

+0

Hinweis für andere Redakteure: Ich werde versuchen, dieses aufzuräumen. – Welbog

+0

Okay, ich bin fertig, es zu bearbeiten. Ich hoffe, ich habe keine Informationen verloren. Ich bin nicht 100% ig klar über die Bedingungen, die kofto4ka aufgelistet hat, also habe ich sie mehr oder weniger verlassen, wie ich sie gefunden habe. – Welbog

+0

Vielen Dank! Erstaunlich :) – user52005

Antwort

3

Verwenden Sie die awesome "CASE" Aussage.

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

Nein "UPDATE ... FROM" in mysql. – Tomalak

+0

Ich denke, dass die richtige Syntax nächsten ist: UPDATE 'ticket_messages' tm INNER JOIN' tickets' AS t ON (t.ticket_id = tm.ticket_id) SET tm.message_from = CASE WENN tm.message_from = t.member_id DANN t.member_id ELSE t.member_to END Aber es alle Zeilen beeinflussen tut. – user52005

+0

Guter Punkt. Ich habe es auf das aktualisiert, was ich für die korrekte mysql-Syntax halte. Ich bin es gewohnt, in SqlServer zu denken. – Talljoe

Verwandte Themen