Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zliczanie największejw wartości
Forum PHP.pl > Forum > Bazy danych > MySQL
TakiJakis
Załóżmy, że jest tabela TEST o 'polach' id i 'wartosc'.

Jak JEDNYM zapytaniem znalezc rekord(y), ktory ma najwieksza 'wartosc', tak zeby wynik zapytania zawieral takze wartosc pola 'id'. Rekordów o największej 'wartosc' moze byc kilka.
Siner
poszukaj informacji o "funkcji" MAX()
TakiJakis
ech, znam MAX(). Poczytaj dokladnie jaki jest problem i zaproponuj rozw, jesli potrafisz.
Siner
No to podzapytanie np LEFT JOIN ?
TakiJakis
Pytasz czy odpowiadasz? Jezeli odpowiadasz, to podaj pelna odpowiedz, nie za bardzo widze jak LEFT JOIN mialoby pomoc...
BaN
  1. SELECT id,wartosc FROM tabela WHERE wartosc=(SELECT MAX(wartosc) FROM tabela)
TakiJakis
Ok, dzieki, a czy jednym zapytaniem da sie to zrobic?
BaN
To było jedno zapytanie winksmiley.jpg

Rozumiem, że chciałyś aby nie było podzapytania. Moim zdaniem za pomocą jednego selekta nie da się.

Jeżeli wiesz, że tych wartości maksymalnych nie będzie np. więcej niż 10, to można ewentualnie wykonać zapytanie z malejącym sortowaniem po polu 'wartosc'
  1. SELECT id,wartosc FROM tabela ORDER BY wartosc DESC LIMIT 10


Pierwszy rekord otrzymany w wyniku tego zapytania ma na pewno wartość maksymalną, pozostałe rekordy można ewentualnie z nim porównać.

Ale moim zdaniem zapytanie, które podałem wcześniej jest optymalne o ile na polu wartosc jest założony indeks
mwojcik
Jeżeli pole id jest z atrybutem autoincrement to wystarczy SQL, ktory napisal @BaN. Jeśli jednak id może się powtarzać to musisz użyć grupowania :
  1. SELECT id,MAX(wartosc) AS max_wartosc FROM tabela GROUP BY id ORDER BY max_wartosc DESC LIMIT 10
php programmer
Wydaje mi się, że pierwsza wersja tj z podzamytaniem
jest szybsza, ponieważ w drugim przypadku,
raz że pobiera się wszystkie wiersze,
potem jeszcze sie je sortuje,
a dopiero na końcu pobiera LIMIT,
na dodatek zwraca złe dane
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.