Skip to content

Mihai Baboi

Vorbim despre mașini, tehnologie și nu numai

Menu
  • Home
  • Despre mine
  • Despre blog
  • Contact
  • Privacy Policy
Menu

Depistarea duplicatelor dintr-o baza de date

Posted on March 16, 2011

M-am lovit de cateva ori de aceasta problema si de fiecare data cautam pe internet solutia si o foloseam ca atare. Dar dupa ce am Googleit a treia oara aceeasi chestie, m-am gandit ca ar fi timpul sa inteleg ce se afla in spatele acestui algoritm.

Vorbesc bineinteles despre acea mica interogare cu ajutorul careia identificam inregistrarile duplicat dintr-o baza de date.

Sa zicem ca avem o tabela in care tinem adrese de email si vrem sa vedem daca avem duplicate. Vom pleca de la premisa ca tabela respectiva are o structura de genul urmator:

CREATE TABLE user
(
	id INT NOT NULL PRIMAY KEY,
	username VARCHAR(64) NOT NULL,
	password VARCHAR(32) NOT NULL,
	first_name VARCHAR(64),
	last_name VARCHAR(64)
);

In tabela de mai sus, campul username este cel care tine adresa de email. In cazul in care va intrebati, campul password are 32 de carctere pentru ca parola va fi criptata md5.

Deci, cum facem sa vedem daca avem aceeasi adresa de email de mai multe ori in aceasta tabela? Interogarea va arata asa:

SELECT
	u.username,
	count(u.username) AS cnt
FROM
	user u
GROUP BY
	u.username
HAVING
	cnt > 1
;

Astfel, aflam care din adresele de email se gasesc de mai multe ori in baza de date. Odata ce avem aceasta informatie, putem sa facem o cautare dupa respectivele adrese de email si sa investigam duplicatele.

Dar putem face chiar mai mult. Poate vrem sa vedem, de exemplu cine s-a inscris de mai multe ori folosind acleasi nume si aceeasi adresa de email. Pentru acest lucru, vom modifica interogarea astfel:

SELECT
	u.first_name,
	u.last_name,
	u.username,
	count(u.username) AS cnt
FROM
	user u
GROUP BY
	u.username,
	u.first_name,
	u.last_name
HAVING
	cnt > 1
;

Acest tip de interogare poate fi foarte util in anumite situatii. De asemenea, se pot face niste statistici interesante. Putem afla de exemplu, cati utilizatori au ales aceeasi parola atunci cand s-au inscris. Nu vom vedea parola aleasa, pentru ca este criptata, dar cel putin stim cati utilizatori folosesc parole foarte comune…

SELECT
	u.password,
	count(u.password) AS cnt
FROM
	user u
GROUP BY
	u.password
HAVING
	cnt > 1
;

Cam asta este ideea de baza in aflarea duplicateolr din baza de date. Evident,  in functie de situatie, putem sa rafinam cautarea si sa filtram cateva rezultate folosind si un WHERE in interogarea noastra. Dar despre acest lucru vom vorbi poate, intr-un articol viitor.

Share this:

  • Click to share on Facebook (Opens in new window) Facebook
  • Click to share on X (Opens in new window) X

Related

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

  • Analiză Tehnică
  • Auto
  • Comunicate
  • Concurs
  • Diverse
  • Evenimente
  • Foto
  • Hardware
  • Întreabă-mă
  • Lansări
  • Mașini
  • Noutăți auto
  • Opinie
  • Programare
  • Review
  • Scurte
  • Șed și Cuget
  • Zvonuri

allview Android aspect autonomie browser bune practici camera CodeIgniter Code Igniter Cold Fusion concluzii concurs css3 display div dual core Evolio evoMAG evoMAG.ro hardware HTC html html5 instalare lansare laptop Library libris.ro marketonline Nikon nokia performanta pret programare review samsung Samsung Galaxy S II smartphone specificatii standarde Symbian tableta teste upgrade user experience

©2025 Mihai Baboi | Design: Newspaperly WordPress Theme