Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Zliczanie największejw wartości
TakiJakis
post 22.11.2007, 17:25:29
Post #1





Grupa: Zarejestrowani
Postów: 54
Pomógł: 0
Dołączył: 7.11.2004

Ostrzeżenie: (40%)
XX---


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.
Go to the top of the page
+Quote Post
Siner
post 22.11.2007, 17:34:56
Post #2





Grupa: Zarejestrowani
Postów: 159
Pomógł: 6
Dołączył: 2.01.2004

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


poszukaj informacji o "funkcji" MAX()


--------------------
Go to the top of the page
+Quote Post
TakiJakis
post 22.11.2007, 18:03:00
Post #3





Grupa: Zarejestrowani
Postów: 54
Pomógł: 0
Dołączył: 7.11.2004

Ostrzeżenie: (40%)
XX---


ech, znam MAX(). Poczytaj dokladnie jaki jest problem i zaproponuj rozw, jesli potrafisz.

Ten post edytował TakiJakis 22.11.2007, 18:03:50
Go to the top of the page
+Quote Post
Siner
post 22.11.2007, 18:13:43
Post #4





Grupa: Zarejestrowani
Postów: 159
Pomógł: 6
Dołączył: 2.01.2004

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


No to podzapytanie np LEFT JOIN ?


--------------------
Go to the top of the page
+Quote Post
TakiJakis
post 22.11.2007, 20:43:19
Post #5





Grupa: Zarejestrowani
Postów: 54
Pomógł: 0
Dołączył: 7.11.2004

Ostrzeżenie: (40%)
XX---


Pytasz czy odpowiadasz? Jezeli odpowiadasz, to podaj pelna odpowiedz, nie za bardzo widze jak LEFT JOIN mialoby pomoc...

Ten post edytował TakiJakis 22.11.2007, 21:09:34
Go to the top of the page
+Quote Post
BaN
post 22.11.2007, 21:57:26
Post #6





Grupa: Zarejestrowani
Postów: 158
Pomógł: 43
Dołączył: 9.11.2007

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


  1. SELECT id,wartosc FROM tabela WHERE wartosc=(SELECT MAX(wartosc) FROM tabela)
Go to the top of the page
+Quote Post
TakiJakis
post 22.11.2007, 23:46:28
Post #7





Grupa: Zarejestrowani
Postów: 54
Pomógł: 0
Dołączył: 7.11.2004

Ostrzeżenie: (40%)
XX---


Ok, dzieki, a czy jednym zapytaniem da sie to zrobic?
Go to the top of the page
+Quote Post
BaN
post 23.11.2007, 12:36:08
Post #8





Grupa: Zarejestrowani
Postów: 158
Pomógł: 43
Dołączył: 9.11.2007

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


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
Go to the top of the page
+Quote Post
mwojcik
post 23.11.2007, 13:58:49
Post #9





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 22.07.2007

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


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
Go to the top of the page
+Quote Post
php programmer
post 23.11.2007, 14:31:05
Post #10





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 5
Dołączył: 8.11.2004
Skąd: trójmiasto

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


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

Ten post edytował php programmer 23.11.2007, 14:31:22
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: 19.07.2025 - 13:07