¿Hay alguna manera de verificar si lead_id está varias veces en la tabla y, en caso afirmativo, excluirlo de la consulta? La razón es que solo quiero agregar nuevas filas si status_id = 1 Y si no se encontraron otras filas/id de estado para ese lead_id.
La base de datos está diseñada de manera que para cada actualización de estado crea una nueva fila. Por lo tanto, la fila anterior tiene una marca de tiempo más antigua y permanece en la tabla de base de datos, y se mostrarán en el front-end en un componente de historial de estado. Pero dado que está diseñado de esta manera, no puedo simplemente decir: dar a cada usuario con estado 1, una nueva actualización de estado. Porque luego agregará una fila para cada lead_id, ya que todos los leads ingresarán a la base de datos con status_id 1.
Consulta que estaba usando hasta ahora:
INSERT INTO `lead_has_status` (`lead_id`, `lead__status_id`, `comment`, `created_at`, `updated_at`)
SELECT (`lead_id`, 13, "", `created_at`, `updated_at`)
WHERE `lead__status_id` = 1 AND
Cómo se ven los datos:
lead_id | estado_id | mas datos |
---|---|---|
uno | uno | datos |
uno | 12 | datos |
2 | uno | datos |
2 | catorce | datos |
3 | uno | datos |
4 | uno | datos |
5 | uno | datos |
6 | uno | datos |
Solución del problema
si su tabla tiene una identificación única por fila, entonces puede usar una consulta como esta
INSERT INTO `lead_has_status` (`lead_id`, `lead__status_id`, `comment`, `created_at`, `updated_at`)
SELECT (`lead_id`, 13, "", `created_at`, `updated_at`)
FROM `lead_has_status` l
WHERE `lead__status_id` = 1 AND NOT EXISTS (
SELECT 1 FROM lead_has_status
WHERE `lead_id` = l.`lead_id` AND id <> l.id );
y sin identificación
INSERT INTO `lead_has_status` (`lead_id`, `lead__status_id`, `comment`, `created_at`, `updated_at`)
SELECT (`lead_id`, 13, "", `created_at`, `updated_at`)
FROM `lead_has_status` l
WHERE `lead__status_id` = 1 AND ()
SELECT COUNT(*) FROM lead_has_status
WHERE `lead_id` = l.`lead_id`) = 1;
No hay comentarios:
Publicar un comentario