Maison  >  Questions et réponses  >  le corps du texte

Éliminer les lignes avec des valeurs en double dans la colonne a d'un tableau

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粉366946380P粉366946380183 Il y a quelques jours287

répondre à tous(1)je répondrai

  • P粉441076405

    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 ;

    répondre
    0
  • Annulerrépondre