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