Re: Duplicats sous MySQL

2003-01-29 Par sujet Leandro Guimarães Faria Corsetti Dutra
On Mon, 2003-01-27 at 18:43, Thierry Lombardot wrote:
> 
> J'ai une question concernant les bases de donnees relationnelles (pour 
> mon cas, MySQL):

Pardonnez-moi, une correction conceptuel: MySQL n'est-ce pas ni
relationnelle, ni SQL.  Le seul système relationnelle aujourdui est
proprietaire, Alphora Dataphor.

Pardonnez-moi mon patois tout particulier de Français, et ausse la
precision.


-- 
 _
/ \ Leandro Guimarães Faria Corsetti Dutra+41 (21) 216 15 93
\ / http://tutoriald.sf.net./ fax +41 (21) 216 19 04
 X  Orange Communications CH  +41 (78) 787 15 93
/ \ Campanha da fita ASCII contra mensagens HTML  +41 (21) 648 11 34

--
http://www-internal.alphanet.ch/linux-leman/ avant de poser
une question. Ouais, pour se désabonner aussi.



Re: Duplicats sous MySQL

2003-01-28 Par sujet Marc SCHAEFER
On Tue, Jan 28, 2003 at 04:38:00PM +0100, Jean-Bruno Luginbühl wrote:

> Personnellement j'utilise pgaccess (livré avec debian woody en tout
> cas), il permet de gérer et créer des utilisateurs, ainsi que les droits

Ah, encore un truc: Webmin a un module de gestion de PostgreSQL. Avec la
woody, il est recommandé de ne pas installer le package par défaut mais
d'installer depuis la source de webmin.com.

--
http://www-internal.alphanet.ch/linux-leman/ avant de poser
une question. Ouais, pour se désabonner aussi.



Re: Duplicats sous MySQL

2003-01-28 Par sujet Jean-Bruno Luginbühl
Le mar 28/01/2003 à 14:15, Escario Julien a écrit :
> Il me
> faudrait aussi une interface graphique pour gérer les bases et pourquoi un
> chiffrement SSL des connexions ...

Personnellement j'utilise pgaccess (livré avec debian woody en tout
cas), il permet de gérer et créer des utilisateurs, ainsi que les droits
de ceux-ci sur les tables. Devrait fonctionner sous Windows avec
installation des modules tcl/tk. Sinon sous Windows il y a PgadminII,
qui fonctionnerait sous WINE.

http://pgadmin.postgresql.org/pgadmin2.php?ContentID=1

Jean-Bruno

--
http://www-internal.alphanet.ch/linux-leman/ avant de poser
une question. Ouais, pour se désabonner aussi.



Re: Duplicats sous MySQL

2003-01-28 Par sujet Marc SCHAEFER
On Tue, Jan 28, 2003 at 02:15:26PM +0100, Escario Julien wrote:

> Ben d'après ce que j'ai compris, il est possible de se baser sur plusieurs
> systèmes d'authentification. Par user système (avc pg_ident), par hôté (avec
> pg_hba.conf) ou par mot de passe (avec pg_shadow). Mais je ne sais pas
> comment mettre tout ca en pratique pour avoir un accès par user/mot de passe
> uniquement sans avoir systématiquement un user système dérrière. Il me

si tu mets simplement:

host all 127.0.0.1 255.0.0.0   password

alors l'authentification est locale avec l'utilisateur donné en
paramètre et le mot de passe correspondant dans pg_shadow, sans besoin
d'utilisateur UNIX (AFAIK).

L'étape suivante est de stocker les mots de passe hashés.

> faudrait aussi une interface graphique pour gérer les bases et pourquoi un

phppgadmin (encore que c'est très primaire).

pgaccess (idem)

> chiffrement SSL des connexions ...

pour commencer, de la redirection de port via SSH pourrait suffire.
--
http://www-internal.alphanet.ch/linux-leman/ avant de poser
une question. Ouais, pour se désabonner aussi.



Re: Duplicats sous MySQL

2003-01-28 Par sujet Escario Julien
> On Tue, Jan 28, 2003 at 10:47:15AM +0100, Escario Julien wrote:
>
>> En ce qui me concerne, je me bats toujours avec l'authentification des
>> utilisateurs postgres (qui a l'ait TRES complète, un peu trop même) et
>> du coup, j'ai acheté le bouquin de oreilly ...
>
> Effectivement, c'est la partie la plus ennuyeuse de PostgreSQL.
> Explique-moi ce que tu veux faire.

Ben d'après ce que j'ai compris, il est possible de se baser sur plusieurs
systèmes d'authentification. Par user système (avc pg_ident), par hôté (avec
pg_hba.conf) ou par mot de passe (avec pg_shadow). Mais je ne sais pas
comment mettre tout ca en pratique pour avoir un accès par user/mot de passe
uniquement sans avoir systématiquement un user système dérrière. Il me
faudrait aussi une interface graphique pour gérer les bases et pourquoi un
chiffrement SSL des connexions ...
Je sais, ca fait beaucoup :-))

Julien


--
http://www-internal.alphanet.ch/linux-leman/ avant de poser
une question. Ouais, pour se désabonner aussi.



Re: Duplicats sous MySQL

2003-01-28 Par sujet Marc SCHAEFER
On Tue, Jan 28, 2003 at 10:47:15AM +0100, Escario Julien wrote:

> En ce qui me concerne, je me bats toujours avec l'authentification des
> utilisateurs postgres (qui a l'ait TRES complète, un peu trop même) et du
> coup, j'ai acheté le bouquin de oreilly ...

Effectivement, c'est la partie la plus ennuyeuse de PostgreSQL.
Explique-moi ce que tu veux faire.
--
http://www-internal.alphanet.ch/linux-leman/ avant de poser
une question. Ouais, pour se désabonner aussi.



Re: Duplicats sous MySQL

2003-01-28 Par sujet Escario Julien
> Mais bon, moi j'aime beaucoup PostgreSQL.

Ca, on avait comrpis ;-))
En ce qui me concerne, je me bats toujours avec l'authentification des
utilisateurs postgres (qui a l'ait TRES complète, un peu trop même) et du
coup, j'ai acheté le bouquin de oreilly ...

Julien


--
http://www-internal.alphanet.ch/linux-leman/ avant de poser
une question. Ouais, pour se désabonner aussi.



Re: Duplicats sous MySQL

2003-01-28 Par sujet Marc SCHAEFER
On Mon, Jan 27, 2003 at 10:31:08PM +, GELIN Patrick wrote:

> Le problème de MySQL c'est que son langage de requête SQL est limité et
> ne permet pas l'utilisation de clauses SUB-SELECT c'est à dire de clause

Une autre solution, donnée dans la doc de MySQL est de violer le
standard SQL en utilisant l'instruction DELETE de MySQL, qui dans les
versions récentes permet apparemment un DELETE sur une table avec des
conditions sur d'autres tables.

Mais bon, moi j'aime beaucoup PostgreSQL.
--
http://www-internal.alphanet.ch/linux-leman/ avant de poser
une question. Ouais, pour se désabonner aussi.



Re: Duplicats sous MySQL

2003-01-27 Par sujet GELIN Patrick




Le problème de MySQL c'est que son langage de requête SQL est limité et ne permet pas l'utilisation de clauses SUB-SELECT c'est à dire de clause SELECT imbriquées les unes dans les autres. Ce qui aurait été très pratique et même indispensable pour venir à bout de ce problème de doublons. J'ai moi même résolu un problème de doublon mais pas de façon entièrement automatique. Ce que j'ai fais c'est simplement une requête qui met en évidence les doublons, le reste, c'est à dire l'effacement des doublons, je l'ai fais à la main. Ma requête était la suivante:



SELECT email, count( email ) AS total 

FROM LesClients 

WHERE email <>  "" 

GROUP  BY email 

HAVING total > 1



Le champs qui a des doublons est email, dans la table LesClients. Cette requête permet d'afficher les valeurs doublon ainsi que  le nombre de doublon :-))



A+



Le lun 27/01/2003 à 17:43, Thierry Lombardot a écrit :

Bonjour a tous,

J'ai une question concernant les bases de donnees relationnelles (pour 
mon cas, MySQL):
Existe-t-il une commande SQL pour effacer des entrees dupliquees dans 
une table? La redondance diminue les performance...J'imagine que ce 
probleme est connu. J'ai une cle priaire sur "id" pour une certaine 
table, mais des entrees identiques ont ete introduites avec differentes 
"id" et je voudrais m'en debarasser. Je n'ai pas tres envie d'ecrire un 
script perl-DBI pour cela...
Des suggestions?

Merci pour votre soutient,

Th.


--
http://www-internal.alphanet.ch/linux-leman/ avant de poser
une question. Ouais, pour se désabonner aussi.







Patrick GELIN

rue du Beau-Site 3

CH-2300 La Chaux-de-Fonds

Switzerland

Tél: +41 (0)32 913 41 48

Email: [EMAIL PROTECTED]














Re: Duplicats sous MySQL

2003-01-27 Par sujet Escario Julien
> DELETE FROM test
> WHERE id IN (SELECT id FROM test t1
>  WHERE t1.id IN (SELECT t1.id FROM test t2
>  GROUP BY t2.numero_avs, t2.id
>  HAVING (t1.id > MIN(t2.id))
> AND (t1.numero_avs
>  = t2.numero_avs)));
> PS: dans ce qui précède j'utilise la syntax PostgreSQL, à vous
>d'adapter. Notamment je ne sais pas si MySQL supporte déjà
>les requêtes imbriquées. Sinon il faudra passer par des
>tables temporaires.

MySQL 3 ne gère pas les subselects (la version 5 devrait les implémenter),
mais il existe un "work-around" à voir dans la doc MySQL à l'adresse :
http://www.mysql.com/doc/en/ANSI_diff_Sub-selects.html

Julien


--
http://www-internal.alphanet.ch/linux-leman/ avant de poser
une question. Ouais, pour se désabonner aussi.



Re: Duplicats sous MySQL

2003-01-27 Par sujet Marc SCHAEFER
On Mon, Jan 27, 2003 at 06:43:49PM +0100, Thierry Lombardot wrote:

> probleme est connu. J'ai une cle priaire sur "id" pour une certaine 
> table, mais des entrees identiques ont ete introduites avec differentes 
> "id" et je voudrais m'en debarasser. Je n'ai pas tres envie d'ecrire un 

Si cela gêne, alors peut-être que la structure de la base de données
aurait dû être complétée avec une vérification de doublon.

Par exemple:

CREATE TABLE test (id SERIAL NOT NULL,
   nom TEXT NOT NULL,
   commentaire TEXT NOT NULL,
   PRIMARY KEY(id), UNIQUE(id));

pourrait être complété, si l'on sait que `nom' sera forcément unique
(mais attention!):

UNIQUE(nom)

On peut aussi spécifier l'unicité sur plusieurs champs, comme par
exemple:

   CREATE TABLE test (id SERIAL NOT NULL,
  prenom TEXT NOT NULL,
  nom TEXT NOT NULL,
  numero_avs TEXT NOT NULL,
  commentaire TEXT NOT NULL,
  PRIMARY KEY(id), UNIQUE(id),
  UNIQUE(numero_avs),
  UNIQUE(prenom, nom));

De nouveau il faut être sûr que dans le cadre considéré `prénom, nom'
est unique. Donner un exemple réel est recommandé.

Dans notre cas, si l'on suppose que l'on a créé cette table en oubliant
la condition UNIQUE(numero_avs), on pourrait faire comme suit:

   1. supprimer les doublons (on suppose que si le numéro AVS est le
  même, on oublie les autres informations sauf pour le premier qui vient.
  Vérifier que cela respecte la sémantique des données).

  Effacer les doublons:

 -- Idée rapide: est un doublon un enregistrement dont
 -- l'id est supérieur au plus petit id, pour le même numéro
 -- AVS.

 DELETE FROM test
 WHERE id IN (SELECT id FROM test t1
  WHERE t1.id IN (SELECT t1.id FROM test t2
  GROUP BY t2.numero_avs, t2.id
  HAVING (t1.id > MIN(t2.id))
 AND (t1.numero_avs
  = t2.numero_avs)));

 PS: je n'ai pas trop réfléchi alors je vous laisse
 simplifier / améliorer cette requête.

   2. créer l'index unique.

  CREATE UNIQUE INDEX numero_avs_index
 ON test (numero_avs);

PS: dans ce qui précède j'utilise la syntax PostgreSQL, à vous
d'adapter. Notamment je ne sais pas si MySQL supporte déjà
les requêtes imbriquées. Sinon il faudra passer par des
tables temporaires.

--
http://www-internal.alphanet.ch/linux-leman/ avant de poser
une question. Ouais, pour se désabonner aussi.