Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [sql] Wybor tylko unikalnych wartosci
ronin
post
Post #1





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 13.07.2008

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


Witam,
Mam problem z pewnym zapytaniem. Mam tabele zawierajaca kilka kolumn, z czego w jednej kolumnie wiersze sie powtarzaja.
Chcialbym aby zapytanie zwrocilo mi tylko po jednym wierszu dla kazdej wartosci. Bardzo prosze o pomoc.

Pozdrawiam
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 15)
dr_bonzo
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


A ktory z wierszy ma zwracac dla kazdej z wartosci [jak sa np 4ry to ktory ma wybrac??]?
No chyba ze chcesz wyciagnac tylko TA jedna kolumne.


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
phpion
post
Post #3





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Skorzystaj z DISTINCT:
  1. SELECT DISTINCT kolumna FROM tabela;
Go to the top of the page
+Quote Post
ronin
post
Post #4





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 13.07.2008

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


dzieki,

tylko jeszcze jedna rzecz, jesli napisze
Kod
SELECT DISTINCT kolumna FROM
tabela to dostane tylko ta jedna kolumne z unikalnymi wierszami, a mam sytuacje w ktorej jedna kolumna ma wszystkie wiersze unikalne wiec jesli napisze
Kod
SELECT DISTINCT kolumna_z_powtorzeniami, kolumna_bez_powtorzen FROM tabela
to z kolei dostane powtorzone wartosci w kolumnie_z_powtorzeniami a to wlasnie unikalne wartosci tej kolumny mnie interesuja. Jest jakis sposob na to ?

Cytat(dr_bonzo @ 13.07.2008, 20:12:22 ) *
A ktory z wierszy ma zwracac dla kazdej z wartosci [jak sa np 4ry to ktory ma wybrac??]?
No chyba ze chcesz wyciagnac tylko TA jedna kolumne.


moze wybrac dowolny np. pierwszy

Ten post edytował ronin 13.07.2008, 19:32:18
Go to the top of the page
+Quote Post
phpion
post
Post #5





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Musisz pamiętać, że DISTINCT działa dla całych wyciąganych rekordów. Jeśli więc normalnie otrzymujesz dane:
Cytat
a | a
a | b
a | c
a | d
b | a
b | b

to DISTINCT tak naprawdę nic Ci nie da ponieważ każdy z tych wierszy różni się od siebie.
Go to the top of the page
+Quote Post
ronin
post
Post #6





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 13.07.2008

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


No wlasnie. Zatem jest jakis sposob rozwiazania mojego problemu ?
Go to the top of the page
+Quote Post
phpion
post
Post #7





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Ja osobiście nie do końca rozumiem Twój problem. Może podaj uproszczone dane otrzymywane zwykłym SELECTem oraz te, które chcesz otrzymać finalnie. Chyba w ten sposób będzie najłatwiej znależć skuteczne rozwiązanie.
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #8





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


Pytalem przeciez, na jakiek podstawie SQL ma wiedziec ktore kolmny_z_niepowtarzajacymi_sie_wartosciami ma dobrac.

Mozesz zrobic tak: select distinct kolumna_z_powtorzeniami...; i do tego dojoinwac ta tabele raz jeszcze, ew. wrzucic to w podzapytanie; ALE i tak musisz jakos wybrac ktory rekord zwrocic dla danej kolumna_z_powtorzeniami


  1. SELECT r.id, r.code, temp.value FROM repeats r
  2. JOIN ( SELECT r2.id, r2.value FROM repeats r2 ORDER BY r2.value DESC )AS temp ON temp.id = r.id
  3. GROUP BY r.code


ORDER BY r2.value DESC -- tu ustalasz ktory wiersz dostaniesz dla danej wartosci ktora DISTINCtujesz


edit:
no i SQLki do bazki:

  1. CREATE TABLE `test`.`repeats` (
  2. `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
  3. `code` INT NOT NULL ,
  4. `value` INT NOT NULL ,
  5. UNIQUE (
  6. `value`
  7. )
  8. ) ENGINE = MYISAM;
  9.  
  10. INSERT INTO `test`.`repeats` (
  11. `id` ,
  12. `code` ,
  13. `value`
  14. )
  15. VALUES (
  16. NULL , '1', '1'
  17. ), (
  18. NULL , '1', '2'
  19. ), (
  20. NULL , '1', '3'
  21. ), (
  22. NULL , '2', '4'
  23. ), (
  24. NULL , '2', '5'
  25. );


Ten post edytował dr_bonzo 13.07.2008, 20:27:13


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
Zajec
post
Post #9





Grupa: Zarejestrowani
Postów: 1 086
Pomógł: 8
Dołączył: 10.12.2003

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


Tak ja pisali wyżej, nie wiemy które wartości z kolumna_bez_powtorzen są dla Ciebie istotne. Możesz zrobić np. tak:
  1. SELECT kolumna_z_powtorzeniami, MAX(kolumna_bez_powtorzen) FROM tabela GROUP BY kolumna_z_powtorzeniami
Zmiast MAX możesz podstawić inne, np. MIN, AVG.
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #10





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


Bez MAX/MIN/.. tez zadziala [ale GROUP musi zostac]


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
ronin
post
Post #11





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 13.07.2008

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


Cytat(Zajec @ 14.07.2008, 09:28:56 ) *
Tak ja pisali wyżej, nie wiemy które wartości z kolumna_bez_powtorzen są dla Ciebie istotne. Możesz zrobić np. tak:
  1. SELECT kolumna_z_powtorzeniami, MAX(kolumna_bez_powtorzen) FROM tabela GROUP BY kolumna_z_powtorzeniami
Zmiast MAX możesz podstawić inne, np. MIN, AVG.



Nie przeczytaliscie chyba tego co napisalem wczesniej, odpowiedzialem juz na to pytanie, moze sie zle wyrazilem. Sprobuje na przykladzie:

AdresWWW | AdresIP
www.subdomena1.domena1.pl | 83.12.14.5
www.subdomena2.domena1.pl | 83.12.14.5
www.subdomena1.domena2.pl | 83.12.14.6
www.subdomena2.domena2.pl | 83.12.14.6
www.subdomena3.domena2.pl | 83.12.14.6
www.subdomena1.domena3.pl | 83.12.14.12

a chce zwrocic cos takiego:

AdresWWW | AdresIP
www.subdomena1.domena1.pl | 83.12.14.5
www.subdomena1.domena2.pl | 83.12.14.6
www.subdomena1.domena3.pl | 83.12.14.12


czyli mamy sytuacje w ktorym na dany serwer www wskazuje kilka adresow www i mnie nie interesuje ktory adres www zostanie zwrocony, interesuje mnie tylko to, zeby otrzymac wszystkie adresy IP z przypisanymi im adresami www. Jesli bedzie 10 roznych adresow www pokazujacych 10 razy na ten sam adres IP to chce w wyniku otrzymac ten adres IP i jedna dowolna domene ktora na niego pokazuje, nie ma znaczenia ktora.

Pozdrawiam
Go to the top of the page
+Quote Post
nospor
post
Post #12





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




No to w czym problem?
  1. SELECT www, ip FROM tabela GROUP BY ip

i juz smile.gif


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

"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
ronin
post
Post #13





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 13.07.2008

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


MS SQL Server 2000 Query Analyzer:

Cytat
Column 'Tabela.www' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.


w tym.
Go to the top of the page
+Quote Post
nospor
post
Post #14





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




na przyszlsoc w tagu tematu okreslaj jaka to baza danych.
Ja pisalem zapytanie dla mysql smile.gif

a najlepiej wkladaj do wlasciwego dzialu... na MS SQL jest wlasciwy dzial


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

"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
ronin
post
Post #15





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 13.07.2008

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


bede pamietal na przyszlosc smile.gif
ale teraz bardzo chcialbym rozwiazac ten problem smile.gif
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #16





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


A moj kod nie dziala? http://forum.php.pl/index.php?s=&showt...st&p=492919
Co prawda dla mysql, ale sobie przepiszesz.


--------------------
Nie lubię jednorożców.
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 Aktualny czas: 21.08.2025 - 14:18