Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> DISTINCT i całe wiersze
templar
post 10.10.2007, 09:15:11
Post #1





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 13.09.2006
Skąd: Poland

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


Witam, nie wiem jak wykonać następującą rzecz. Chcę wybrać z tabeli rekordy DISTINCTem, wg. jednej kolumny, ale pobrać również wartości innych kolumn tej tabeli.

Nie wiem, czy to jest jasne, ale chodzi po prostu o distinct jednej kolumny, ale z wszystkimi innymi kolumnami w tym wierszu.
W pseudojezyku

SELECT DISTINCT(pole1) ORAZ wszystkie inne FROM table WHERE cos tam.

Nie wiem, jak to skonstruować w MySQL.

Pozdrawiam.
Go to the top of the page
+Quote Post
Cezar708
post 10.10.2007, 10:28:28
Post #2





Grupa: Zarejestrowani
Postów: 1 116
Pomógł: 119
Dołączył: 10.05.2005
Skąd: Poznań

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


niestety DISTINCT to jest klauzura, która mówi, że dwie takie same krotki nie mogą się pojawić i nie dotyczy to pojedynczej kolumny.

Może podaj swoją strukturę danych i powiedz dokładnie co chcesz osiągnąć

Pozdrawiam
Go to the top of the page
+Quote Post
templar
post 10.10.2007, 10:40:34
Post #3





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 13.09.2006
Skąd: Poland

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


Hej. Dzięki za odzew.

A więc mam taką tabelkę:



i chcę wybrać DISTINCTem pole entry_id, ale później, kiedy będę robił fetch - chciałbym mieć również dane, które są w wierszach obok entry_id - czyli takie jak user_id, site_id i w ogóle wszystkie.

Chcę po prostu wszystkie dane, ale z unikalnych wierszy entry_id.

Pozdrawiam!
Go to the top of the page
+Quote Post
najtje
post 10.10.2007, 11:10:39
Post #4





Grupa: Zarejestrowani
Postów: 48
Pomógł: 0
Dołączył: 4.10.2007

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


Musisz zagregować dane z tabli oraz wskazać który wiersz z tego zagregowanego zbioru cię interesuje - aby wskazać który najlepiej wykorzystać klucz głowny (id) i wywołać na nim jakąś funkcję zwracajaca jeden element: max() albo min()
Czyli najlepiej zrobić tak:

select min(id) as id from tabela group by entry_id
teraz wystarczy już tylko zrobić joina z właściwą tabelą i gotowe:
select * from (select min(id) as id from tabela group by entry_id) as q1 NATURAL JOIN (select * from tabela) as q2
Go to the top of the page
+Quote Post
Cezar708
post 10.10.2007, 11:24:25
Post #5





Grupa: Zarejestrowani
Postów: 1 116
Pomógł: 119
Dołączył: 10.05.2005
Skąd: Poznań

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


popraw mnie jeśli nie rozumiem, chcesz aby wynikiem było:
Kod
entry_id | user_id | site_id | rating    |
---------+---------+---------+-----------+
3       | 37653   | 1       | 5,4,2,3,1 |
4       | 37653   | 1       | 1         |
6       | 37653   | 1       | 5         |


jeśli chcesz taki wynik to niestety się nie da, jedyne co w jednym zapytaniu osiągniesz to coś agregującego, na przykład maksymalny rating lub sumę wszystkich ratingów:
  1. SELECT DISTINCT entry_id, user_id, site_id, count(rating) AS liczba_ratingow
  2. FROM twojaTabela;
  3.  
  4. -- lub
  5. SELECT DISTINCT entry_id, user_id, site_id, max(rating) AS maksymalny_rating
  6. FROM twojaTabela;
  7.  
  8. -- lub
  9. SELECT DISTINCT entry_id, user_id, site_id, sum(rating) AS suma_ratingow
  10. FROM twojaTabela


niestety wydaje mi się że to co chcesz osiągnąć nie da się po prostu za pomocą 1 zapytania z DISTINC, chyba że źle rozumiem

EDIT: w zasadzie DISTINCT w moich przykładach nie ma zastosowania, można go usunąć

Ten post edytował Cezar708 10.10.2007, 11:25:48
Go to the top of the page
+Quote Post
templar
post 12.10.2007, 09:05:29
Post #6





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 13.09.2006
Skąd: Poland

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


Niekoniecznie tak, jak podałeś na 1 obrazku. Nie chcę wszystkich ratingów, to był tylko przykład. Chcę po prostu całe wiersze, ale ograniczone DISTINCTem 1 kolumny.

Dzięki wszystkim, którzy zabrali głos w dyskusji.
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 - 07:28