logo
13.09.2020 14:09
1
Řeším takovou fičuřinu, kterou jsem nikdy nepotřeboval.

Mám záporné číslo a potřebuji ze dvou sloupců vybrat správný řádek.
Mám číslo -283 a potřebuji získat id řádku se správným rozmezím.
Potřebuji získat id = 4.

Např.
Název:  sql.png
Zobrazení: 192
Velikost:  10,6 KB

Kód:
SELECT id FROM range WHERE -283 BETWEEN value_from AND value_to
Předem díky
13.09.2020 14:18
2
nez si napisal otazku, aj si sa zamyslel nad tym co pises? :D

...

ok, takze ani ja som sa nezamyslel nez som pisal :D

cize ide o to ze mas from a to hodnoty s tym ze to je viac od nuly nez from. da sa to riesit v mysql ale osobne by som radsej dal podmienku do kodu a podla toho zvolil spravnu query.

cize nieco ako
Kód:
if (hodnota >= 0) {
    SELECT id FROM tabulka WHERE value_from <= hodnota AND value_to >= hodnota
} else {
    SELECT id FROM tabulka WHERE value_from >= hodnota AND value_to <= hodnota
}
pripadne
Kód:
    SELECT id FROM tabulka WHERE (hodnota >= 0 AND value_from <= hodnota AND value_to >= hodnota) OR (hodnota < 0 AND value_from >= hodnota AND value_to <= hodnota)
13.09.2020 14:26
3
Máte chybu v tabulce, kde záporné hodnoty máte obráceně. value_from má být -500 a value_to -100, ne tak jak to máte. Pak vám to bude fungovat.
13.09.2020 14:46
4
Původně odeslal node
nez si napisal otazku, aj si sa zamyslel nad tym co pises? :D
Ne

---------- Příspěvek doplněn 13.09.2020 v 14:47 ----------

Původně odeslal Whispere
Máte chybu v tabulce, kde záporné hodnoty máte obráceně. value_from má být -500 a value_to -100, ne tak jak to máte. Pak vám to bude fungovat.
Děkuji, jasné.
13.09.2020 17:39
5
Původně odeslal zezmen
Řeším takovou fičuřinu, kterou jsem nikdy nepotřeboval.

Mám záporné číslo a potřebuji ze dvou sloupců vybrat správný řádek.
Mám číslo -283 a potřebuji získat id řádku se správným rozmezím.
Potřebuji získat id = 4.

Např.
Příloha 32225

Kód:
SELECT id FROM range WHERE -283 BETWEEN value_from AND value_to
Předem díky
Podle zarovnání hodnot value_x doleva (z printscreenu tabulky v PMA) bych řekl, že je máte uložené jako nějaký typ stringu (text, varchar, ...). Ty dva sloupce musí být definované jako číslo (int, decimal, ...), jinak to nebude fungovat tak jak očekáváte.
26.09.2020 19:38
6
Kód:
set @x = -283;
SELECT id FROM intervaly ORDER BY OF(@x >= value_from AND @x <= value_to, 1, 0) DESC, LEAST(ABS(@x - value_to), ABS(@x - value_from)) LIMIT 1;
## test, jestli to najde i cislo mimo intervaly
set @x = 6000;
SELECT * FROM intervaly ORDER BY OF(@x >= value_from AND @x <= value_to, 1, 0) DESC, LEAST(ABS(@x - value_to), ABS(@x - value_from));