Page 1 sur 1
Liaison d'enregistrements selon un champ déterminé
Posté : 01 oct. 2013, 20:06
par nounou123
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 :
Code : Tout sélectionner
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 :
Code : Tout sélectionner
name phone lindId
John 0592466396 1
Jonh 0924633588 1
Daniel 0652436465 2
Joseph 0454646463 3
Daniel 0513464555 2
any help? Merci

Re: Liaison d'enregistrements selon un champ déterminé
Posté : 01 oct. 2013, 20:59
par moogli
salut,
c'est pas ainsi qu'il faut faire

il te faut une table (entité) avec les gens et une table avec les numéros (voir une table avec les type de n°) ainsi tu auras un modèle sain et évolutif
par exemple
CREATE TABLE gens (
idgens INT NOT NULL PRIMARY KEY,
nomgens VARCHAR(50) NOT NULL,
prenomgens VARCHAR(50) NOT NULL
);
CREATE TABLE typetel (
idtypetel INT NOT NULL PRIMARY KEY,
nomtype VARCHAR(20) NOT NULL
);
CREATE TABLE numerogens (
idgens INT NOT NULL,
idtypetel INT NOT NULL,
numero VARCHAR(20) NOT NULL
);
ALTER TABLE numerogens ADD CONSTRAINT fk_gens FOREIGN KEY idgens REFERENCES gens (idgens);
ALTER TABLE numerogens ADD CONSTRAINT fk_typenumero FOREIGN KEY idtypetel REFERENCES typetel (idtypetel);
j'ai fait du sql du coup tu ne te débrouille pour les auto_increment des clef primaire
@+
Re: Liaison d'enregistrements selon un champ déterminé
Posté : 02 oct. 2013, 09:53
par nounou123
mon but c'est d'ajouter un champ d'étiquetage et de rester sur la même table d'entrée
Re: Liaison d'enregistrements selon un champ déterminé
Posté : 02 oct. 2013, 12:57
par moogli
Ça va être un mercier sans nom, mais c'est réalisable.
Sur la base avec un trigger avant insertion et une séquence.
@+
Re: Liaison d'enregistrements selon un champ déterminé
Posté : 03 oct. 2013, 10:13
par antoine94200
Bonjour,
c'est sous oracle ou mysql ?
Re: Liaison d'enregistrements selon un champ déterminé
Posté : 03 oct. 2013, 14:42
par nounou123
Bonjour,
c'est sous mysql
Bonjour,
c'est sous oracle ou mysql ?
Re: Liaison d'enregistrements selon un champ déterminé
Posté : 03 oct. 2013, 15:33
par antoine94200
Sous mysql tu peux t'inspirer de ça :
select u.name,u.phone,d.lindId from utilisateurs u join (SELECT
name,
min(@rownum := @rownum + 1) AS lindId
FROM
utilisateurs,
(SELECT @rownum := 0) r
group by name) d on d.name=u.name
je te laisse modifier la requête pour avoir un pas de 1 ...
Re: Liaison d'enregistrements selon un champ déterminé
Posté : 03 oct. 2013, 15:33
par antoine94200
Sous mysql tu peux t'inspirer de ça :
select u.name,u.phone,d.lindId from utilisateurs u join (SELECT
name,
min(@rownum := @rownum + 1) AS lindId
FROM
utilisateurs,
(SELECT @rownum := 0) r
group by name) d on d.name=u.name
je te laisse modifier la requête pour avoir un pas de 1 ...
Re: Liaison d'enregistrements selon un champ déterminé
Posté : 03 oct. 2013, 15:45
par antoine94200
voilà ta réponse est ici , en position 5.
http://stackoverflow.com/questions/1895 ... r-in-mysql
SELECT u.name,
u.phone,
if(@prev=u.name,@rownum,@rownum:=@rownum+1) as lindId,
@prev=u.name
from utilisateurs,
(SELECT @rownum := 0) r
Re: Liaison d'enregistrements selon un champ déterminé
Posté : 03 oct. 2013, 17:05
par nounou123
merci ça répond bien à mon problème !!
juste une petit correction qui donne la requête correcte
SELECT u.name,
u.phone,
IF(@prev=u.name,@rownum,@rownum:=@rownum+1) AS lindId,
@prev := u.name
FROM utilisateurs,
(SELECT @rownum := 0) r