Üdv!
Először is, mindekinek BUÉK :)
Másodszor, van egy (PHP) kérdésem amelyre a válasz valószínűleg primitív, de most nem látom, szóval itt van:
egy ciklus végigpörget egy MySQL táblát, és annak adatait vizsgálja.
szóval, eltárolom minden sorban a tábla 6. 7. 8. elemét (legyen a, b, c), és ezeket hasonlítjuk össze:
ha a < b és a < c akkor a
ha b < a és b < c akkor b
ha c < a és c < b akkor c
az egész összehasonlításban még van egy rakás feltétel, tehát nem egy sima minimumkiválasztás, de azok a részek működnek.
Próbáltam keresni a hibát:kiírattam vele csak ezeket az értékeket és a következőket kaptam:
2.38 > 2.68 = 1
1.65 > 2.35 = 1
1.35 > 3.30 = 1
1.43 > 6.80 = 1
...
Annyi még, hogy a MySQL táblában az értékek típusa VARCHAR(6), de tudtommal a PHP gynegén típusos nyelv ezért nincs szükség átalakításra...
Thx: RiseR
update: megvan, tényleg gáz volt... az érték előtt volt mindenhol egy space abban az oszlopban... :(
- 2622 megtekintés
Hozzászólások
Hát, ha stringet hasonlítasz számként akkor a tizedes vessző és pont mint locale különbség kellemesen megviccelhet. :) SQL-ben miért nem tudod valamilyen numerikus típusként tárolni egyébként? A másik tipp, hogy amennyire lehet az SQL lekérdezéssel szűkítsd az eredmény táblát.
- A hozzászóláshoz be kell jelentkezni
Ha selectbol csinalod (ahogy kellene), akkor mindenkepp szar lesz. Numerikus erteket numerikus tipussal hasznalj, egyebkent :)
--
zsebHUP-ot használok!
- A hozzászóláshoz be kell jelentkezni
Pont azért nem használtam selectet, mert a tábla el volt rontva tele értékekkel varchar-ban és gondoltam php-vel ez nem lehet gond.
Update:szűkült a kör kiderült, hogy csak az utolsó összehasonlítással van probléma
kipróbáltam:
a = "2.38";
c = "2.68";
c < a = 1
"2.68" < "2.38" = 0
kiírattam mindent és még így is ugyanaz... :S
---
Where there is a shell, there is a way.
- A hozzászóláshoz be kell jelentkezni
Ha a tábla el van rontva, nem az az első és _egyetlen_ megoldás, hogy megjavítod?
BTW példakódot tölts fel valahova, ami szerint c < a tényleg igaz.
- A hozzászóláshoz be kell jelentkezni
Nálam helyesen működik... más lesz ott a bibi.
Kód:
$a="2.38";
$c="2.68";
var_dump( $c < $a ); // bool(false)
var_dump( "2.68" < "2.38" ); // bool(false)
- A hozzászóláshoz be kell jelentkezni
szrintem is, amugy van cast operator php-ben:
(float)"2.38"
- A hozzászóláshoz be kell jelentkezni
Nem biztos, hogy sz@r lesz. Mi van akkor, ha a MySQL oldalon kierőszakolja a numerikusra konvertálást? SELECT a+0, b+0, c+0 FROM tabla;
Update: ez korrektül működik az aktuális esetben (szóköz a numerikus karakterek előtt) is.
- A hozzászóláshoz be kell jelentkezni