Liaison d'enregistrements selon un champ déterminé

cs_nahoulaa Messages postés 43 Date d'inscription mercredi 12 août 2009 Statut Membre Dernière intervention 7 octobre 2015 - Modifié par cs_nahoulaa le 1/10/2013 à 15:47
nagaD.scar Messages postés 4272 Date d'inscription samedi 8 septembre 2007 Statut Membre Dernière intervention 4 janvier 2023 - 3 oct. 2013 à 13:28
Bonjour,
Je souhaite écrire une requête qui me permet de rajouter un nouveau champ "linkId" rassemblant les enregistrements convenant sur la même valeur d'un certain champ c1 . Le champ "linkId" est de type int et il s'incrémente à chaque nouvelle variété de valeur de c1.

Soit l'exemple :

name          phone 

John        0592466396
Jonh        0924633588
Daniel      0652436465
Joseph      0454646463
Daniel      0513464555


le résultat attendu de la requête est alors :

Soit l'exemple :
name          phone             lindId

John        0592466396             1
Jonh        0924633588             1
Daniel      0652436465             2
Joseph      0454646463             3
Daniel      0513464555             2


any help? Merci ;)

1 réponse

nagaD.scar Messages postés 4272 Date d'inscription samedi 8 septembre 2007 Statut Membre Dernière intervention 4 janvier 2023 17
Modifié par nagashima le 3/10/2013 à 13:28
oy !

En partant par une fonction mysql ca va pas être pratique (perso je ne fais jamais de traitement de base directement en mysql).
La question est donc : quel langage de programmation utilises-tu?

sinon dans l'absolu, tu peux faire :

1 : création d'une table temporaire pour récupérer les résultats :
CREATE TEMPORARY TABLE _TEMPTAB (
  t_id int(10) unsigned NOT NULL AUTO_INCREMENT,
  t_lib varchar(200) NOT NULL DEFAULT '',
  PRIMARY KEY ('t_id')
) ENGINE=MyISAM AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;

2 : récupération des résultats et insertion dans la table temporaire (l'insertion génèrera l'auto incrément :
INSERT INTO _TEMPTAB(t_lib)
SELECT DISTINCT name from c1;

3 : enfin, pour chaque enregistrement dans c1 :
 
update c1 set linkId = ** where name='**';
-- en remplacant ** par les valeur de la table temporaire : t_id pour link id , t_lib pour le name. (Je suppose que tu as ajouté ton champs linkid)


avec le language que tu utilise je pourrai te donner le code mais je suppose que tu es capable de le faire.

SI tu n'a que la base de données, tu peux executer la requête :
select distinct concat("update c1 set linkId = ", t_id, " WHERE NAME='",t_lib,"';")
FROM _TEMPTAB;

et pour exécuter chaque ligne de résultat.

naga
0
Rejoignez-nous