Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Najbliższy wynik
Shinji
post
Post #1





Grupa: Zarejestrowani
Postów: 50
Pomógł: 1
Dołączył: 28.11.2006

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


Witam,

Od kilku godzin męczę się nad pewnym zagadnieniem, przeszukałem forum i google i nic nie umiem znaleźć - może nie umiem do końca sprecyzować zapytani.

Ale przechodząc do sedna sprawy. Potrzebuje wyciągnąć z bazy wynik najbliższy podanej wartości liczbowej.

Przykładowo mam tabele a w niej jedno z pól to średnia (typ pola DOUBLE) i podając jakąś liczbę zwróci mi najbliższy wynik z bazy.

Mógłbym się tym zając poprzez php, ale jednak w zamierzeniu tabela ma mieć mnóstwo danych, wiec wyciąganie jej całej jest mało optymalne.
Go to the top of the page
+Quote Post
tr@k
post
Post #2





Grupa: Zarejestrowani
Postów: 41
Pomógł: 8
Dołączył: 13.09.2010

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


Możesz wziąć jeden rekord większy od zadanej liczy i jeden mniejszy (2 zapytania) a w php sprawdzisz która liczba jest bliższa.
Go to the top of the page
+Quote Post
Crozin
post
Post #3





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


  1. (SELECT ... FROM ... WHERE col_name >= ? ORDER BY col_name ASC LIMIT 1)
  2. UNION
  3. (SELECT ... FROM ... WHERE col_name <= ? ORDER BY col_name DESC LIMIT 1)
To powinno zwrócić dwa najbliższe rekordy (ewentualnie jeden), jeden większy, jeden mniejszy od podanej wartości. Teraz po stronie PHP wystarczy odrzucić tego, który jest dalej. W sumie pewnie można by i to bez jakiegoś większego problemu zrobić po stronie bazy obliczając odległość (dodać ABS(col_name - ?) AS distance w SELECT każdego zapytania) i zwrócić tego, który ma wartość distance mniejszą.
Go to the top of the page
+Quote Post
Shinji
post
Post #4





Grupa: Zarejestrowani
Postów: 50
Pomógł: 1
Dołączył: 28.11.2006

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


Kurde chłopaki wielkie dzięki, głowiłem się nad tym tyle godzin, a odpowiedź brzmi tak banalnie, dosłownie porażka ^^

Jeszcze raz wielkie dzięki =)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 22:18