Hát ha engem kérdezel, én nem vok egy matematikus zseni, még csak elméleti szinten képzett programozó sem ... :-) Én gyakorlati szemszögből szoktam megpróbálni a problémákat megoldani.
(magyarul kitalálok valamit, kipróbálom és ha működik akkor használom...)
Ha jól értem arra akarsz kilyukadni, hogy a double számaimat lebegőpontosan tárolja a MySql és hiába én azt írom bele elvileg hogy mondjuk 11, amikor megkérdezem legközelebb hogy melyik rekordban egyenlő 11-el, akkor nem adja ki, mert szerinte az lehet hogy csak 10.9999999998...?
Mitől függ hogy milyen kicsi eltérés esetén tekintődik egyformának, vagy hogyan kerekítődik ?
Ez gyakorlatilag is okozhat gondot, vagy csak elméleti probléma? (nem vettem eddig észre hogy ez gond volna, postgres-en futogat itt ott ez az új double-s módi...)
Off-topik tesztkérdés: hogyan ellenőrizzük (lehetőleg gyorsan), hogy melyik az a legkisebb lebegőpontos szám, amelyre x=x+1 (a tárolás pontatlansága miatt, mielőtt valaki megkérdezné).
Ez egy olyan háttérrendszer amelyik pc-s kliens programok alá dolgozik. Több telephely egymástól függetlenül működő adatbázisait szinkronizálja időnként egymáshoz egy központin keresztül. Valamikor, amikor az ISDN még hűde gyorsnak számított és az állandó internet még nem volt természetes, egy konkrét cégnek csináltam, nekik megfelelt akkor ahogyan volt (ma is működik még valahogy), de azóta továbbgondoltam és mostanában újraírtam benne sok dolgot, hogy rugalmasabb legyen, eltűnjön belőle pár korábbi korlát... A double mező tulképpen egy minden adatíráskor folyamatosan növekvő jelző mező. Nem agyaltam sokat a típuson, ráböktem a legnagyobbra, hogy a lehető legtovább kitartson.
A lényeg, hogy az ORDER BY -al működik a dolog, így fog maradni.
A limit-tel kapcsolatban még nem lett konkrétan leírva, hogy az order by azért kell mert anélkül a rekordok sorrendje nem garantált. A rögzítés sorrendjét felejtsd el, szerintem a MySQL is végez néha karbantartást a fájlokban és olyankor könnyen előre kerülhet egy újabban rögzített rekord egy törölt helyére.
Azért akarok limitet, mert esetenként sokezer rekord is lehet az eredmény (amit a helyi gépen feldolgozok és letárolok más formátumba későbbi offline munkához) és nem akarom egyszerre áthúzgálni a kapcsolaton, hanem beállított adagonként, ciklusban...
Ez volna az értelme... Másképp kellene azt csinálnom ?
ha nem akarod sorbarendezni valami szerint akkor miert akarsz limit-et? Azaz MIRE akarsz limitet? Mert egy rendezetlen halmazra limit-et mondani, ugy hogy neked nem random kellenek a rekordok eleg butasag.
ha kiadsz egy ilyet: SELECT * FROM rendelo WHERE kod='XX' AND tolt > 200, ahol XX egyenló az ominózus sor egyedi kulcsával, akkor visszakapod a sort?
amúgy biztosan 200 van benne? mert a double miatt, ha pl. 199.9999999999999999999999999999999999999999 van benne, akkor simán 200-at látsz, de azért az valójában kisebb 200-nál
Közben tovább is próbáltam a dolgot.. Más táblán is tudom reprodukálni a dolgot, de úgy látom hogy csak akkor jelentkezik a hiba, ha a feltételes LIMIT 0,500 első eredménysora egyben a tábla legelső sora is... Ha már a második rekord lenne az első eredménysor, akkor jól működik a feltételes limit 0,500 is... érdekes.
Sajnos nem néztem el... Utánanéztem közben a mysql.com on is és másnak is előjött már ez a probléma, de nem láttam egyik új verzió leírásánál sem hogy megoldották volna. Én úgy vettem észre, hogy akkor marad el a legelső sor a limit 0,500 -ban, ha a where feltételben szerepel egy bizonyos indexelt mező.
Ha nem szűrök arra a mezőre, akkor a limit is jól működik. Az indexeléssel lehet valami gond, én megoldottam a problémát egy két plusz sorral, nem törtem rajta a fejem tovább.( Az index újra létrehozása nem segített)
load data infile '/var/www/meo/meoterm.txt' into table termek fields terminated by ' ' optionally enclosed by '"' ignore 1 lines (@a,@b,@c,@d,@e,@f,@g,@h,@i,@j,@k,@l,@m,@n,@o,@p,@q,@r,@s) set gyartott_mennyiseg=replace(@i,',','.');
Egy textfájlból szeretnék adatokat importálni, de a fájlban a tizedesjel vessző (pl. 1234,15) A MySql import (Load data infile) viszont úgy működik jól, ha a jel pont (1234.15). Hogyan tudnám importkor megadni neki, hogy a vessző a tizdesjel? Sajnos a textfájl fix formátumú.
Csak nem Access-ből érkezel? Ott sem szabad összemosni az adatbázist a felhasználói felülettel. Az adatbázis SQL-ül tud (NevemTeve megírta a választ), a felhasználói felület pedig SQL parancsokat küld az adatbázisnak.