Heim > Fragen und Antworten > Hauptteil
Gibt es eine Möglichkeit zu überprüfen, ob die Lead_ID mehrmals in der Tabelle vorkommt, und sie in diesem Fall von der Abfrage auszuschließen? Der Grund dafür ist, dass ich nur dann eine neue Zeile hinzufügen möchte, wenn status_id = 1 und keine andere status_id/Zeile für diese Lead_id gefunden wird.
Die Datenbank ist so konzipiert, dass bei jeder Statusaktualisierung eine neue Zeile erstellt wird. Daher haben alte Zeilen ältere Zeitstempel und verbleiben in der Datenbanktabelle, und diese werden in der Statusverlaufskomponente des Frontends angezeigt. Aber da es so konzipiert ist, kann ich nicht einfach sagen: Gebt jedem Benutzer einen Status 1 und ein neues Status-Update. Denn dann wird für jede Lead_ID eine Zeile hinzugefügt, da alle Leads mit der Status_ID 1 in die Datenbank aufgenommen werden.
Abfragen, die ich bisher verwendet habe:
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
Wie die Daten aussehen:
lead_id | status_id | Mehr Daten |
---|---|---|
1 | 1 | Daten |
1 | 12 | Daten |
2 | 1 | Daten |
2 | 14 | Daten |
3 | 1 | Daten |
4 | 1 | Daten |
5 | 1 | Daten |
6 | 1 | Daten |
Für jeden neuen Lead (Formularübermittlung) wird eine Zeile erstellt und diesem Lead die status_id 1 (Status: neu) zugewiesen. Ich muss zwar die über 200 Leads stapelweise von 1 auf eine andere Status_ID aktualisieren, aber mit der Abfrage, die ich jetzt habe, wird jede Zeile aktualisiert, die eine Status_ID von 1 enthält. Ich möchte, dass zunächst geprüft wird, ob die Lead_id nur einmal in der Tabelle vorhanden ist. Wenn dies zutrifft, wird eine neue Zeile mit der aktualisierten status_id hinzugefügt.
Nach der SQL-Abfrage muss es also so aussehen:
lead_id | status_id | Mehr Daten |
---|---|---|
1 | 1 | Daten |
1 | 12 | Daten |
2 | 1 | Daten |
2 | 14 | Daten |
3 | 1 | Daten |
3 | 12 | Daten |
4 | 1 | Daten |
4 | 12 | Daten |
5 | 1 | Daten |
5 | 12 | Daten |
6 | 1 | Daten |
6 | 12 | Daten |
TLDR: Wenn Lead_id nur einmal in der Tabelle gefunden wird, fügen Sie eine neue Zeile mit status_id hinzu.
P粉4410764052024-04-01 09:38:34
如果您的表每行都有一个唯一的 ID,那么您可以使用这样的查询
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 );
并且没有 ID
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 ;