Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [mysql] unikalne wartosci z tabeli
wojtek22
post
Post #1





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 19.12.2015

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


mam taką strukture i dane

  1. CREATE TABLE IF NOT EXISTS `test` (
  2. `id` int(10) UNSIGNED NOT NULL,
  3. `numer` int(11) NOT NULL,
  4. `miesiac` int(11) NOT NULL,
  5. `imie` text COLLATE utf8_unicode_ci NOT NULL,
  6. `kolor` text COLLATE utf8_unicode_ci NOT NULL
  7. ) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
  8.  
  9. INSERT INTO `test` (`id`, `numer`, `miesiac`, `imie`, `kolor`) VALUES
  10. (1, 2, 201503, 'rober', 'czerwony'),
  11. (2, 6, 201504, 'tomek', 'pomaranczowy'),
  12. (3, 4, 201503, 'adam', 'czarny'),
  13. (4, 5, 201504, 'adam', 'czerwony'),
  14. (5, 3, 201503, 'tomek', 'zolty'),
  15. (6, 7, 201504, 'edyta', 'fioletowy'),
  16. (7, 8, 201505, 'adam', 'zielony'),
  17. (8, 1, 201503, 'adam', 'bialy');


jak napisac zapytanie zeby otrzymac taki wynik

  1. numer miesiac imie kolor
  2. 1 201503 adam bialy
  3. 2 201503 rober czerwony
  4. 3 201503 tomek zolty
  5. 7 201504 edyta fioletowy


chodzi o to aby zapytanie zwróciło tylko unikalne imiona wraz z wartosciami ktore byly przypisane
do pierszego numeru (kolumna numer w tabelce)

po edycji

zrobilem cos takiego,czy da sie to jakos optymalniej napisac
  1. SELECT `numer`,`miesiac`,`imie`,`kolor` FROM (SELECT `imie`,`numer`,`miesiac`,`kolor` FROM `test` ORDER BY numer) AS ww GROUP BY `imie` ORDER BY numer


Ten post edytował wojtek22 19.12.2015, 22:35:11
Go to the top of the page
+Quote Post
darko
post
Post #2





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

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


Jak pogrupujesz po numerze i użyjesz select distinct to nie działa ?


--------------------
Nie pomagam na pw, tylko forum.
Go to the top of the page
+Quote Post
wojtek22
post
Post #3





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 19.12.2015

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


jesli masz na mysli cos takiego to nie do konca to dziala, ze wzgledu ze unikanosc w tym zapytaniu nie dotyczy tylko kolumny imie ale wszystkich kolumn razem
  1. SELECT DISTINCT numer, miesiac, imie, kolor FROM test ORDER BY numer


http://sqlfiddle.com/#!2/dac46f/3/0
Go to the top of the page
+Quote Post
DarkAbso
post
Post #4





Grupa: Zarejestrowani
Postów: 60
Pomógł: 10
Dołączył: 17.11.2011

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


Możesz spróbować jeszcze tak:
  1. SELECT * FROM test WHERE numer IN (SELECT MIN(numer) FROM test GROUP BY imie)

Jest w bardziej przejrzysty sposób napisane, ale czy wydajniejsze? Raczej bym na to nie liczył. smile.gif
Go to the top of the page
+Quote Post
wojtek22
post
Post #5





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 19.12.2015

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


twoje tez dziala poprawnie
ale moje przy 450 tys rekordow wykonuje sie o prawie 2,5 sekundy szybciej
w kazdym badz razie dzieki za jakis inny pomysl

Ten post edytował wojtek22 22.12.2015, 00:16:35
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: 19.08.2025 - 17:43