Maison > Questions et réponses > le corps du texte
Existe-t-il un moyen de vérifier si lead_id apparaît plusieurs fois dans le tableau et si oui, de l'exclure de la requête ? La raison est que je souhaite uniquement ajouter une nouvelle ligne si status_id = 1 et qu'aucun autre status_id/row pour ce Lead_id n'est trouvé.
La base de données est conçue de telle manière que chaque mise à jour de statut crée une nouvelle ligne. Par conséquent, les anciennes lignes ont des horodatages plus anciens et restent dans la table de base de données, et celles-ci seront affichées dans le composant historique d'état du frontend. Mais comme il est conçu de cette façon, je ne peux pas simplement dire : donner à chaque utilisateur un statut 1 et une nouvelle mise à jour du statut. Parce qu'alors, il ajoutera une ligne pour chaque Lead_id puisque tous les leads entreront dans la base de données avec status_id 1.
Requêtes que j'ai utilisées jusqu'à présent :
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
À quoi ressemblent les données :
lead_id | status_id | Plus de données |
---|---|---|
1 | 1 | Données |
1 | 12 | Données |
2 | 1 | Données |
2 | 14 | Données |
3 | 1 | Données |
4 | 1 | Données |
5 | 1 | Données |
6 | 1 | Données |
Pour chaque nouveau prospect (soumission de formulaire), il créera une ligne et attribuera à ce prospect le statut_id 1 (statut : nouveau). J'ai besoin de mettre à jour par lots les plus de 200 prospects de 1 à un autre status_id, mais avec la requête que j'ai maintenant, il mettra à jour chaque ligne contenant un status_id de 1. Ce que je veux, c'est qu'il vérifie d'abord si le Lead_id n'existe dans la table qu'une seule fois et si c'est vrai, il ajoute ensuite une nouvelle ligne avec le status_id mis à jour.
Donc, après la requête SQL, cela doit ressembler à ceci :
lead_id | status_id | Plus de données |
---|---|---|
1 | 1 | Données |
1 | 12 | Données |
2 | 1 | Données |
2 | 14 | Données |
3 | 1 | Données |
3 | 12 | Données |
4 | 1 | Données |
4 | 12 | Données |
5 | 1 | Données |
5 | 12 | Données |
6 | 1 | Données |
6 | 12 | Données |
TLDR : Si Lead_id n'est trouvé qu'une seule fois dans le tableau, ajoutez une nouvelle ligne avec status_id.
P粉4410764052024-04-01 09:38:34
Si votre table a un identifiant unique pour chaque ligne, vous pouvez utiliser une requête comme celle-ci
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 );
Et pas de pièce d'identité
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 ;