Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Największy z mniejszych
Forum PHP.pl > Forum > Bazy danych > MySQL
msulik
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?
GeoS
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 :-)
msulik
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.
GeoS
Teraz nie mam za bardzo czasu szukac rozwiazania, ale najprosciej bedzie to rozbic na dwa zapytania.
kurtz
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.
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.