Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Największy z mniejszych
msulik
post 13.04.2002, 16:20:19
Post #1





Grupa: Zarejestrowani
Postów: 83
Pomógł: 0
Dołączył: 31.03.2002
Skąd: Toruń

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


Mam tabelę o nazwie moja_tabela, w której między innymi znajduje się pole typu INT o nazwie moje_pole. W tabeli są zapisane jakieś dane, a w polu moje_pole są jakieś liczby (parami różne). Ponadto daną mam konkretną liczbę, powiedzmy 100.

Jak mogłoby wyglądać zapytanie, które zwróci rekord o największej wartości pola moje_pole mniejszej niż 100?

Np. jeśli w tabeli moja_tabela w polu moje_pole znajdują się liczby 10, 412, 97, 211, 95, 432, 23, 103, 11, to ma zostać zwrócona liczba 97 (największa spośród liczb mniejszych od 100).

Poniższe rozwiązanie:
Kod
SELECT * FROM moja_tabela WHERE moje_pole<100 ORDER BY moje_pole DESC LIMIT 1

nie satysfakcjonuje mnie czasowo, ponieważ sortowanie (ORDER BY) wydaje się być w tym przypadku nadużyciem.

Jak sformułować zapytanie nie używające ORDER BY?


--------------------
misiu | chór

"Zdeterminowany programista potrafi stworzyć fatalny kod w każdym języku"
Allen Holub
Go to the top of the page
+Quote Post
GeoS
post 13.04.2002, 23:17:48
Post #2





Grupa: Zarejestrowani
Postów: 602
Pomógł: 0
Dołączył: --
Skąd: W - WA -> GRO

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


MySQL ma rozne przydatne funkcje, w tym matematyczne.

Sprobuj tego:

Kod
SELECT MAX(moje_pole) FROM moja_tabela


PS Polecam poczytac:
http://www.mysql.com/doc/M/a/Mathematical_..._functions.html :-)
Go to the top of the page
+Quote Post
msulik
post 14.04.2002, 09:57:35
Post #3





Grupa: Zarejestrowani
Postów: 83
Pomógł: 0
Dołączył: 31.03.2002
Skąd: Toruń

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


Hehe, thx, ale mi chodzi o coś takiego:
Kod
SELECT * FROM moja_tabela WHERE moje_pole IN (

SELECT MAX(moje_pole) FROM moja_tabela WHERE moje_pole<100

);


ale bez użycia subselektów, czyli bez użycia IN, bo moja wersja mysql tego nie obsługuje.


--------------------
misiu | chór

"Zdeterminowany programista potrafi stworzyć fatalny kod w każdym języku"
Allen Holub
Go to the top of the page
+Quote Post
GeoS
post 14.04.2002, 10:32:12
Post #4





Grupa: Zarejestrowani
Postów: 602
Pomógł: 0
Dołączył: --
Skąd: W - WA -> GRO

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


Teraz nie mam za bardzo czasu szukac rozwiazania, ale najprosciej bedzie to rozbic na dwa zapytania.
Go to the top of the page
+Quote Post
kurtz
post 20.04.2002, 10:47:14
Post #5





Grupa: Przyjaciele php.pl
Postów: 786
Pomógł: 0
Dołączył: 18.03.2002
Skąd: Wroclaw/Warszawa

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


Cytat
Poniższe rozwiązanie:
Kod
SELECT * FROM moja_tabela WHERE moje_pole<100 ORDER BY moje_pole DESC LIMIT 1

nie satysfakcjonuje mnie czasowo, ponieważ sortowanie (ORDER BY) wydaje się być w tym przypadku nadużyciem.
jesli moje_pole nie jest indexem to przykro mi ale ZTCP to jest to jedyna mozliwosc jednozapytaniowego rozwiazania.


--------------------
.. make web your home ..
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: 26.04.2024 - 06:26