par
two3d » 15 mai 2024, 16:35
Tu peux utiliser une approche basée sur une sous-requête qui compte le nombre d'occurrences de chaque titre, puis utiliser cette information pour générer le champ unique avec le suffixe approprié.
UPDATE `table` t
JOIN (
SELECT
nom,
CASE
WHEN COUNT(*) > 1 THEN CONCAT(lower(nom), '-', ROW_NUMBER() OVER (PARTITION BY lower(nom) ORDER BY nom))
ELSE lower(nom)
END AS unique_nom
FROM
`table`
GROUP BY
lower(nom)
) u ON t.nom = u.nom
SET t.unique = u.unique_nom;
Explication :
- J'utilise une sous-requête pour regrouper les noms en minuscules et compter leur occurrence.
- Dans cette sous-requête, j'utilise la fonction ROW_NUMBER() pour attribuer un numéro de ligne à chaque occurrence d'un titre en double, partitionné par le nom en minuscules et trié par le nom.
- Ensuite, j'utilise une jointure pour mettre à jour la table originale avec les valeurs générées dans la sous-requête.
- Dans la clause SET, j'attribue la valeur du champ unique en utilisant le résultat de la sous-requête, qui génère le champ unique avec le suffixe approprié si nécessaire.
A tester.
Tu peux utiliser une approche basée sur une sous-requête qui compte le nombre d'occurrences de chaque titre, puis utiliser cette information pour générer le champ unique avec le suffixe approprié.
[PHP]UPDATE `table` t
JOIN (
SELECT
nom,
CASE
WHEN COUNT(*) > 1 THEN CONCAT(lower(nom), '-', ROW_NUMBER() OVER (PARTITION BY lower(nom) ORDER BY nom))
ELSE lower(nom)
END AS unique_nom
FROM
`table`
GROUP BY
lower(nom)
) u ON t.nom = u.nom
SET t.unique = u.unique_nom;[/PHP]
Explication :
[list=1][*]J'utilise une sous-requête pour regrouper les noms en minuscules et compter leur occurrence.
[*]Dans cette sous-requête, j'utilise la fonction ROW_NUMBER() pour attribuer un numéro de ligne à chaque occurrence d'un titre en double, partitionné par le nom en minuscules et trié par le nom.
[*]Ensuite, j'utilise une jointure pour mettre à jour la table originale avec les valeurs générées dans la sous-requête.
[*]Dans la clause SET, j'attribue la valeur du champ unique en utilisant le résultat de la sous-requête, qui génère le champ unique avec le suffixe approprié si nécessaire.[/list]
A tester.