Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> porównanie pól w tabeli
isia
post 13.01.2006, 13:32:33
Post #1





Grupa: Zarejestrowani
Postów: 37
Pomógł: 0
Dołączył: 5.05.2003

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 11)
vieri_pl
post 13.01.2006, 14:06:19
Post #2





Grupa: Zarejestrowani
Postów: 406
Pomógł: 9
Dołączył: 24.07.2005
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


O to chodzi questionmark.gif

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


Użyj Where smile.gif
Go to the top of the page
+Quote Post
nospor
post 13.01.2006, 14:31:50
Post #3





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




@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;


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
isia
post 13.01.2006, 14:50:27
Post #4





Grupa: Zarejestrowani
Postów: 37
Pomógł: 0
Dołączył: 5.05.2003

Ostrzeżenie: (0%)
-----


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ę

Ten post edytował isia 13.01.2006, 14:53:11
Go to the top of the page
+Quote Post
nospor
post 13.01.2006, 14:53:41
Post #5





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




no to napisalem ci zapytanie do tego. zwroci ci ono te nazwisko imie i numer, ktore powtarza sie


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
isia
post 16.01.2006, 10:38:00
Post #6





Grupa: Zarejestrowani
Postów: 37
Pomógł: 0
Dołączył: 5.05.2003

Ostrzeżenie: (0%)
-----


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

Ten post edytował isia 16.01.2006, 10:41:39
Go to the top of the page
+Quote Post
nospor
post 16.01.2006, 10:47:33
Post #7





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
isia
post 16.01.2006, 14:42:41
Post #8





Grupa: Zarejestrowani
Postów: 37
Pomógł: 0
Dołączył: 5.05.2003

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
SongoQ
post 16.01.2006, 18:48:30
Post #9





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

Ostrzeżenie: (0%)
-----


@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.


--------------------
Go to the top of the page
+Quote Post
FiDO
post 16.01.2006, 19:09:20
Post #10





Grupa: Przyjaciele php.pl
Postów: 1 717
Pomógł: 0
Dołączył: 12.06.2002
Skąd: Wolsztyn..... Studia: Zielona Góra

Ostrzeżenie: (0%)
-----


A ja do podstaw polece jeszcze http://sqlcourse.com/intro.html . Chyba jedyny interaktywny kurs SQL'a, calkiem przyjemny.


--------------------
Brak czasu :/
Go to the top of the page
+Quote Post
janosick
post 28.09.2006, 15:14:39
Post #11





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 28.09.2006

Ostrzeżenie: (0%)
-----


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

Ten post edytował janosick 28.09.2006, 17:30:42
Go to the top of the page
+Quote Post
giron
post 28.09.2006, 16:11:30
Post #12





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 28.09.2006

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 23.06.2025 - 23:01