Re: Duplicats sous MySQL
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
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
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
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
> 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
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
> 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
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
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
> 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
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.