"Réécriture de compteur basée sur les partitions"
P粉618358260
P粉618358260 2024-01-10 17:44:52
0
1
483

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粉618358260
P粉618358260

répondre à tous(1)
P粉592085423

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

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!