Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> ORDER BY - najbliższa wartość zmiennej
netvalue
post 7.06.2013, 19:45:59
Post #1





Grupa: Zarejestrowani
Postów: 199
Pomógł: 2
Dołączył: 9.06.2008

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


Witam,

Panowie, chec ułożyć zapytanie typu



SELECT * FROM tabele ORDER BY .... i tutaj żeby było warunkiem najbliża wartość pola tabeli NUMER względem zmiennej ZMIENNA

czyli mam zmieną 5.4554

a w tabela

id | NUMER
1 | 1.233
2 | 4.233
3 | 5.123
4 | 1.146

chcialbym uzyskać z zapytania kolejność

5.123
4.233
1.146
1.233

Ten post edytował netvalue 7.06.2013, 19:53:28
Go to the top of the page
+Quote Post
wiiir
post 7.06.2013, 20:14:04
Post #2





Grupa: Zarejestrowani
Postów: 260
Pomógł: 34
Dołączył: 22.02.2010

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


ale jeszcze musisz miec warunek where, samo order by ci nie wystarczy
Go to the top of the page
+Quote Post
netvalue
post 7.06.2013, 20:14:43
Post #3





Grupa: Zarejestrowani
Postów: 199
Pomógł: 2
Dołączył: 9.06.2008

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


nie rozumiem do czego mi ten warunek ?
Go to the top of the page
+Quote Post
wiiir
post 7.06.2013, 20:20:32
Post #4





Grupa: Zarejestrowani
Postów: 260
Pomógł: 34
Dołączył: 22.02.2010

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


jezeli twoja zmienna bedzie wynosic 4.5000

to jak chcesz miec wynik?

order sortuje cały zasób danych wiec masz sortowanie asc lub desc i w tym wypadku zawsze bedzie pierwsze 1.233 lub 5.123

A moze zalezy ci na znalezieniu najblizszej wartosci twojej zmiennej??

Ten post edytował wiiir 7.06.2013, 20:21:20
Go to the top of the page
+Quote Post
netvalue
post 7.06.2013, 20:27:05
Post #5





Grupa: Zarejestrowani
Postów: 199
Pomógł: 2
Dołączył: 9.06.2008

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


i tak tez chcę wyniku miec malejace wartosci od mojego float 5.4554

5.123
4.233
1.146
1.233

robiłem

select * from customer order by abs(`rate` - 5.4554) asc

ale jakos dziwnie zwraca bo przy pełnej tabeli regordów np wartość 2.341 pred wartościa 4.233
Go to the top of the page
+Quote Post
wiiir
post 7.06.2013, 20:38:15
Post #6





Grupa: Zarejestrowani
Postów: 260
Pomógł: 34
Dołączył: 22.02.2010

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


Takim zapytaniem nigdy nie bedziesz mial malejacych wartosci

przykład: masz dane

1 1.234
2 2.343
3 4.111
4 4.555

Twoja zmienna: 3
Twoje zapytanie:
  1. SELECT * FROM customer ORDER BY abs(`rate` - 3) ASC

Wynik:
2 2.343
3 4.111
4 4.555
1 1.234

Ty orderujesz po roznicy nie po wartosci
Go to the top of the page
+Quote Post
netvalue
post 7.06.2013, 20:43:42
Post #7





Grupa: Zarejestrowani
Postów: 199
Pomógł: 2
Dołączył: 9.06.2008

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


no własnie , a jak mam w kolejności warotści to zestawić ?
Go to the top of the page
+Quote Post
wiiir
post 7.06.2013, 20:49:21
Post #8





Grupa: Zarejestrowani
Postów: 260
Pomógł: 34
Dołączył: 22.02.2010

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


Nie ustawisz.
Jezeli twoja zemienna to 3 i najbliższą wartościa jest 3.1 a w kolumnie masz jeszcze wartosc 1 i 4 to teraz w zaleznosci jak bedziesz sortować zawsze pierwsze bedzie albo 1 albo 4.
Zakumałes?

zebys miał wynik
3.1
1

To musisz wykluczyć 4 ze zbioru do sortowania.
Go to the top of the page
+Quote Post
netvalue
post 7.06.2013, 20:53:04
Post #9





Grupa: Zarejestrowani
Postów: 199
Pomógł: 2
Dołączył: 9.06.2008

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


ehh no wielki jednak jestes wink.gif

  1. SELECT * FROM customer_trader WHERE rate > 1.3444 ORDER BY abs(`rate` - 1.3444) ASC


i wszystko jest ok smile.gif

dzieki wielkie smile.gif
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: 25.06.2024 - 01:48