Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: porównanie pól w tabeli
Forum PHP.pl > Forum > Bazy danych > MySQL
isia
Witam...
Stawiam pierwsze kroki w SQLu i ćwiczę na bazie MySQL.
Umiem wyświetlić dane z bazy, posortować itp.
Mam natomiast problem i jakoś nie wiem jak go ugryźć.

Otórz potrzebuję wyświetlić z bazy te rekordy dla których powtarzają się pola.
Np. mam nazwisko, imie i numer jeśli to się powtarza to powinien wyświetlić.
Zupełnie nie wiem jak to ugryźć. Wiem, że tu nie piszecie skryptów za innych ale choć może by mnie ktoś naprowadził jak to zrobić

pozdrówko
isia
vieri_pl
O to chodzi questionmark.gif

  1. SELECT *
  2. FROM tabela WHERE pole = cos OR pole = cos OR pole = cos


Użyj Where smile.gif
nospor
@veri_pl czytaj ze z rozumieniem. "powtarza" jest różne od "równa sie"

gdy powtarza sie dane pole:
  1. SELECT *, count(*)
  2. FROM TABELA GROUP BY pole HAVING count(*)>1;


w twoim przypadku nie do konca rozumiem. maja sie powtarzac wszystkie naraz te trzy pola?
  1. SELECT *, count(*)
  2. FROM TABELA GROUP BY concat(nazwisko,imie,numer) HAVING count(*)>1;
isia
Cytat(nospor @ 2006-01-13 15:31:50)
maja sie powtarzac wszystkie naraz te trzy pola?

tak... chodzi o wyłowienie zdublowanych danych w bazie.

pomodlę się za Emilkę
nospor
no to napisalem ci zapytanie do tego. zwroci ci ono te nazwisko imie i numer, ktore powtarza sie
isia
Fajnie działa - dzięki.
Muszę porównać tylko jedno pole ale powinny wyświetlać się wszystkie duplikaty.
Chodzi o to, że mam w bazie nazwiska,imiona i e-maile. Zdarza się, że email się powtarza bo np. wpisala sie matka i córka i maja tem sam adres - nie chce im wysylac dwoch informacji tylk jedna i musze sprawdzac.
Jak to zrobić?

np. jak jest więcej niż jeden Kowalskich to żeby wyświetlał wszystkich Kowalskich:

Kowalski Adam
Kowalski Andrzej

pozdr.isia
nospor
jesli twoja baza obsluguje podzapytania to:
  1. SELECT *
  2. FROM TABELA WHERE pole IN (SELECT pole
  3. FROM TABELA GROUP BY pole HAVING count(*)>1)
  4. ;
gdzie pole to nazwa pola po ktorym szukasz duplikatow
isia
Działa miodzio dzięki!
Takich zapytań skomplikowanych nigdy nie robiłam.
Czy jest gdzieś w sieci manual do SQLa... tylko nie każcie mi wyszukać w goglach - coś co jest warte polecenia.
SongoQ
@isia Dla podstaw polecam http://www.w3schools.com/sql/

To co pisal nospor to juz raczej wynika z wlasnego doswiadczenia i wprawie w mysleniu jak dziala SQL.
FiDO
A ja do podstaw polece jeszcze http://sqlcourse.com/intro.html . Chyba jedyny interaktywny kurs SQL'a, calkiem przyjemny.
janosick
Witam.

Odgrzebałem ten temat, ponieważ mam podobny problem - muszę wyświetlić rekordy w których powtarza się wartość jednego pola czyli zapytanie
  1. SELECT *
  2. FROM TABELA WHERE pole IN (SELECT pole
  3. FROM TABELA GROUP BY pole HAVING count(*)>1)
  4. ;
jest ok.

Ale niestety na serwerze nie mam mysql 5 tylko jest wersja 4.0.18 i nie jest to zależne ode mnie.
Na tej wersji zwraca mi błąd #1064. W manualu znalazłem że jest to
Kod
#Error: 1064 SQLSTATE: 42000 (ER_PARSE_ERROR)
Message: %s near '%s' at line %d
, ale niezbyt wiem jak to ugryźć.
Próbowałem wymyślić coś z join'em ale jako że jestem początkujący to niebardzo mi to idzie...

Dlatego proszę o pomoc we wskazaniu jak przerobić to zapytanie tak by było ok w starszym mysql.

Pozdrawiam
giron
niektorych rzeczy nie da sie przeskoczyc, zwlaszcza jesli sa ograniczenia
w mysql'u 4.x nie zadasz pytania zlozonego
ten przypadek musisz rozbic na 2 zapytania
pierszym wyciagnij jakie wartosci Ci sie powtarzaja a drugim rekordy z tymi wartosciami
np
select pole from Tabela group by pole having count(pole) > 1;
a nastepnym zapytaniem
select * from Tabela where pole in (x,y);

jesli bedzie mialo byc w tej tabeli sporo rekordow to przydalby sie klucz na takim polu
to juz sprawa miejsca i optymalizacji

pozdrawiam smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.