MySQL -Update mit In und Unterabfrage
-
24-10-2019 - |
Frage
Hallo, ich habe solche Tische:
Tischeintrag:
id | Total_Coments
_____________________
1 | 0
2 | 0
3 | 0
4 | 0
Tabellenkommentare:
id | Eid | Kommentar
_____________________
1 | 1 | Kommentar SDFD
2 | 1 | Test, Test
3 | 1 | Kommentartext
4 | 2 | Dummy -Kommentar
5 | 2 | Beispielkommentar
6 | 1 | fg fgh dfh
Frage Ich schreibe:
UPDATE entry
SET total_comments = total_comments + 1
WHERE id IN ( SELECT eid
FROM comments
WHERE id IN (1,2,3,4,5,6))
Ergebnisse, die ich bekomme, ist:
Tischeintrag:
id | Total_Coments
_____________________
1 | 1
2 | 1
3 | 0
4 | 0
Erwartete Ergebnisse :
Tischeintrag:
id | Total_Coments
_____________________
1 | 4
2 | 2
3 | 0
4 | 0
Jede Hilfe wird geschätzt.
Lösung
Verwenden:
UPDATE entry
SET total_comments = (SELECT COUNT(*)
FROM COMMENTS c
WHERE c.eid = id
GROUP BY c.eid)
WHERE id IN ( SELECT eid
FROM comments
WHERE id IN (1,2,3,4,5,6))
Andere Tipps
Wenn Sie in einer separaten Tabelle wirklich Total_Coments benötigen, würde ich das zu einer Ansicht machen.
CREATE VIEW entry AS
SELECT id, COUNT(comments) AS total_comment
FROM comments
GROUP BY id
Auf diese Weise vermeiden Sie die Wartungsaufgabe, die Tabelle Total_Comente insgesamt zu aktualisieren.
Genau das würde ich erwarten. Die ID befindet sich in dem Set, das Sie geben, also Total_Coments = Total_Comments + 1.
Für jede Instanz mit demselben Wert wird nicht eine hinzufügen: So funktioniert nicht. In wird ein einfaches boolescher Ja/Nein zurückgeben.
Versuchen:
UPDATE entry
SET total_comments = (SELECT COUNT(*)
FROM comments
WHERE entry.id = comments.eid
GROUP BY id)
UPDATE entry e
SET total_comments = ( SELECT COUNT(*) FROM comments WHERE eid = e.id)
WHERE
e.id in (SELECT eid FROM comments WHERE id IN (1,2,3,4,5,6))