Pregunta

Hola tengo tablas como esta:

Entrada de tabla:

ID | Total_comments
_____________________
1 | 0
2 | 0
3 | 0
4 | 0

Comentarios de la tabla:

ID | Eid | comentario
_____________________
1 | 1 | comentario sdfd
2 | 1 | prueba de prueba
3 | 1 | mensaje de texto
4 | 2 | comentario ficticio
5 | 2 | comentario de muestra
6 | 1 | FG FGH DFH

Consulta que escribo:

UPDATE entry 
   SET total_comments = total_comments + 1 
 WHERE id IN ( SELECT eid 
                 FROM comments 
                WHERE id IN (1,2,3,4,5,6))

Los resultados que obtengo son:

Entrada de tabla:

ID | Total_comments
_____________________
1 | 1
2 | 1
3 | 0
4 | 0

Resultados previstos :

Entrada de tabla:

ID | Total_comments
_____________________
1 | 4
2 | 2
3 | 0
4 | 0

Cualquier ayuda será apreciada.

¿Fue útil?

Solución

Usar:

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))

Otros consejos

Si realmente necesita Total_Comments en una tabla separada, lo haría una vista.

CREATE VIEW entry AS 
  SELECT id, COUNT(comments) AS total_comment 
  FROM comments 
  GROUP BY id

De esta manera, evita la tarea de mantenimiento de actualizar la tabla Total_Comments por completo.

Eso es exactamente lo que esperaría. La identificación está en el conjunto que le das, por lo que Total_comments = Total_comments + 1.

No va a agregar uno para cada instancia del mismo valor: no es así como funciona. En devolverá un simple booleano sí/no.

Probar:

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))
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top