Supprimer les doublons d'une table mysql

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par poupilou, 16 Juin 2020.

  1. poupilou
    poupilou WRInaute impliqué
    Inscrit:
    9 Février 2004
    Messages:
    860
    J'aime reçus:
    11
    Salut à tous,

    J'essaie de supprimer les doublons d'une de mes tables MySQL, pour cela je me suis inspiré de ce tuto mais j'ai un peu de mal avec la requête qui supprime les doublons.

    Voici les 3 colonnes de ma table MySQL qui m'intéressent :
    La colonne "Num" est du type int et sa valeur est unique.

    La colonne "Num produit" est du type vachar et il peut y avoir des doublons dans cette colonne.

    La colonne "Prix total" est du type decimal.

    Je cherche les doublons de ma colonne "Num produit" et je souhaite supprimer ces doublons en fonction de leur prix, qui sont classés du plus grand au plus petit. On laisse donc dans la table le produit qui est le moins cher.

    Voici la requête mysql que j'ai faite :

    Code:
    $result = get_requete("SELECT COUNT(*) AS nbr_doublon, `Num produit` FROM `$stock_produits` WHERE $stock_produits.`Num produit`!='' AND $stock_produits.`Num produit`!='0' AND $stock_produits.`Num produit`!='1' GROUP BY `Num produit` HAVING COUNT(*) > 1");
    while($voir = $MysqliFetchArray($result))
    {
    get_requete("DELETE FROM `$stock_produits`
    LEFT OUTER JOIN (
            SELECT MAX(Prix total) as prix, `Num produit`, `Prix total`
            FROM `$stock_produits`
            GROUP BY `Num produit`
        ) as t1
        ON `$stock_produits`.`Prix total` = t1.prix
    WHERE t1.prix IS NULL");
    
    Cette requête ne supprime pas les doublons, voyez-vous des erreurs dans ma requête MySQL ci-dessus ?

    Merci pour votre aide.
     
  2. Nico998
    Nico998 Nouveau WRInaute
    Inscrit:
    4 Avril 2013
    Messages:
    27
    J'aime reçus:
    4
    Bonjour,

    La requête est un peu compliquée, mais peut-être en passant sur une jointure de la table sur elle-même ça serait plus simple

    Voici une requête (non testée) qui :
    • Supprime les doublons en cas de prix supérieur
    • Conserve qu'une seule ligne en cas de prix équivalent.
    Code:
    SELECT DISTINCT A.NUM
    FROM `$stock_produits` A, FROM `$stock_produits` B
    WHERE A.`Num produit` = B.`Num produit`
    AND ((A.NUM <> B.NUM AND A.PRIX > B.PRIX)
    OR (A.NUM > B.NUM AND A.PRIX = B.PRIX))
    Il resterait à mettre tout ça dans un DELETE

    J'espère que ça pourra t'aider
     
    #2 Nico998, 16 Juin 2020
    Dernière édition: 16 Juin 2020
  3. poupilou
    poupilou WRInaute impliqué
    Inscrit:
    9 Février 2004
    Messages:
    860
    J'aime reçus:
    11
    Merci pour ta réponse.

    Etant donné que j'ai beaucoup de données dans ma table, j'ai trouvé cette solution qui est très rapide pour supprimer les doublons de ma table :

    Code:
    -- Create temporary table
    CREATE TABLE temp_table LIKE `$stock_produits`;
    
    -- Add constraint
    ALTER TABLE temp_table ADD UNIQUE(Num produit);
    
    -- Copy data
    INSERT IGNORE INTO temp_table SELECT * FROM `$stock_produits`;
    
    -- Rename and drop
    RENAME TABLE `$stock_produits` TO old_table1, temp_table TO `$stock_produits`;
    DROP TABLE old_table1;
    
     
Chargement...
Similar Threads - Supprimer doublons table Forum Date
Search Console Supprimer des doublons Crawl et indexation Google, sitemaps 26 Octobre 2020
Supprimer événement groupe FB crée par un membre Facebook 7 Avril 2021
Comment supprimer un Pixels Facebook ? Facebook 19 Mars 2021
Supprimer la version en cache de dizaines de PDF Crawl et indexation Google, sitemaps 11 Janvier 2021
Supprimer son compte google maps pour cause d'avis négatifs YouTube, Google Images et Google Maps 10 Décembre 2020
Supprimer mon site de Similarweb ? Ou modifier les données ? Administration d'un site Web 26 Novembre 2020
RGPD : faire supprimer par Facebook l'ensemble de mes informations Droit du web (juridique, fiscalité...) 2 Novembre 2020
Contenu Obsolète supprimer ou noindex ? Débuter en référencement 16 Octobre 2020
Supprimer pages indexées Crawl et indexation Google, sitemaps 11 Octobre 2020
Supprimer des pages en moasse (avec l'accent de Gad) Crawl et indexation Google, sitemaps 5 Octobre 2020