Maison > Questions et réponses > le corps du texte
J'utilise MySQL et PHP avec phpmyadmin. J'ai un problème majeur avec les compteurs basés sur les partitions que j'aimerais améliorer, mais mes connaissances SQL m'en empêchent. Je suis très affligé par cela.
J'aimerais avoir un compteur pour les données en double dans ma table, si la valeur obtient un doublon, elle ajoute un nombre après la valeur et recommence à partir de 1 jusqu'à ce qu'elle rencontre une nouvelle valeur et ainsi de suite. Voici à quoi devrait ressembler le résultat final :
--------------------------- 1 | Josh-1 --------------------------- 2 | Josh-2 -------------------------- 3 | Josh-3 -------------------------- 4 | Josh-4 -------------------------- 5 | Fred-1 -------------------------- 6 | Fred-2 -------------------------- 7 | Fred-3 -------------------------
J'ai déjà reçu de l'aide avec ce compteur ici, mais il n'a pas fonctionné comme je le souhaitais. Et, lorsque j'appuie sur le bouton insérer dans le formulaire, après avoir rechargé phpmyadmin, le formulaire ressemble à ceci :
--------------------------- 1 | Josh-1-1-1 --------------------------- 2 | Josh-2 -------------------------- 3 | Josh-3 -------------------------- 4 | Josh-4 -------------------------- 5 | Fred-1 -------------------------- 6 | Fred-2 -------------------------- 7 | Fred -------------------------
Que se passe-t-il ici ? Le code que je demande de l'aide pour réécrire est le suivant :
UPDATE usermeta u1, (SELECT u1.`id`, CONCAT(u1.`name`,'-',ROW_NUMBER() OVER(PARTITION BY u1.`name` ORDER BY u1.`id`)) newname FROM usermeta u1 JOIN (SELECT `name` , COUNT(*) FROM usermeta GROUP BY `name` HAVING COUNT(*) > 1) u2 ON u1.`name` = u2.`name` ) u3 SET u1.`name` = u3.`newname` WHERE u1.`id` = u3.`id`
Ce code peut-il être réécrit pour créer une table avec des noms numérotés et des doublons qui ressemble au premier exemple de table et fonctionne correctement dans phpmyadmin ? Toute aide est grandement appréciée. Veuillez garder à l’esprit que je suis un utilisateur SQL intermédiaire en difficulté.
P粉5920854232024-01-11 10:44:21
Solution possible - Déclencheur BEFORE INSERT et table MyISAM supplémentaire avec auto-incrémentation secondaire :
Table de travail
Table supplémentaire
Déclencheur
Insérer des lignes - l'index AI est ajouté au nom. Vérifiez le résultat.
Regardez maintenant ce qui est stocké dans la table supplémentaire.
db<>violon ici
Si votre table de travail user
existe déjà et qu'elle contient des données, vous créerez une table supplémentaire et la remplirez de données en utilisant, par exemple,
CREATE TABLE user_index (id INT AUTO_INCREMENT, name VARCHAR(127), PRIMARY KEY (name, id)) ENGINE=MyISAM SELECT MAX(SUBSTRING_INDEX(name, '-', -1) + 0) id, SUBSTRING_INDEX(name, '-', 1) name FROM user GROUP BY 2;
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=38f028cfe1c9e85188ab0454463dcd78