Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: DISTINCT i całe wiersze
Forum PHP.pl > Forum > Bazy danych > MySQL
templar
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.
Cezar708
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
templar
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!
najtje
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
Cezar708
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ąć
templar
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.
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.