Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wybranie najdroższych produktów danego typu
Forum PHP.pl > Forum > Bazy danych > MySQL
Fantazyn
Witam.

Posiadam przykładową tabelkę products:
Kod
id    name    type    price
123451    Park's Great Hits    Music    19.99
123452    Silly Puddy    Toy    3.99
123453    Playstation    Toy    89.95
123454    Men's T-Shirt    Clothing    32.50
123455    Blouse    Clothing    34.97
123456    Electronica 2002    Music    3.99
123457    Country Tunes    Music    21.55
123458    Watermelon    Food    8.73

Jeżeli chcę wyciągnąć największe ceny z każdego produktu to robię zapytanie:
  1. $query = "SELECT type, MAX(price) FROM products GROUP BY type";


Wynik:
Kod
Array (  [type] => Clothing [MAX(price)] => 34.97 )
Array ( [type] => Food [MAX(price)] => 8.73 )
Array ( [type] => Music [MAX(price)] => 21.55 )
Array ( [type] => Toy [MAX(price)] => 89.95 )


Ale jeśli chcę wiedzieć jakie to produkty są najdroższe to już ... problem : ) [przynajmniej dla mnie]

Zapytanie:
  1. $query = "SELECT type, MAX(price) FROM products GROUP BY type";

zwróci oczywiście głupoty:
Kod
Array ([name] => Men's T-shirt  [type] => Clothing [MAX(price)] => 34.97 )
Array ([name] => Watermelon [type] => Food [MAX(price)] => 8.73 )
Array ([name] => Park's Great Hits [type] => Music [MAX(price)] => 21.55 )
Array ([name] => Silly Puddy [type] => Toy [MAX(price)] => 89.95 )


Zna ktoś rozwiązanie? (najlepiej jednym zapytaniem SQL aaevil.gif )

Pozdrawiam

Edit: Chcę wiedzieć jakie to produkty są najdroższe w danym typie (informacji o typie nie było - mój błąd : ))
Czyli chciałbym uzyskać taki wynik:
Kod
Array ([name] => Blouse  [type] => Clothing [MAX(price)] => 34.97 )
Array ([name] => Watermelon [type] => Food [MAX(price)] => 8.73 )
Array ([name] => Country Tunes [type] => Music [MAX(price)] => 21.55 )
Array ([name] => Playstation [type] => Toy [MAX(price)] => 89.95 )


Edit2: Wielkie dzięki mkozak. Za prawidłową odpowiedź, dostosowanie odpowiedzi do mojego problemu i użyteczny link (chociaż ciągle trudno mi się przyzwyczaić do formatu manuala MySQL).
Dziękuję!
Wicepsik
  1. SELECT name, price FROM products ORDER BY price
mkozak
Klasyczne pytanie z dokumentacji:
http://dev.mysql.com/doc/refman/5.0/en/examples.html

  1. SELECT *
  2. FROM products s1
  3. JOIN (
  4. SELECT type, max(price) price
  5. FROM products
  6. GROUP BY type) AS s2
  7. ON s1.type = s2.type AND s1.price = s2.price;
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.