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.

War es hilfreich?

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))
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top