Autor Zpráva
jan fabo
Profil *
zdravim,

na vyber dat z tabulky mam pouzity prikaz
select * from tabulka where ip="192.168.1."
.
na vystupe ocakavam dakyto format dat:
192.168.1.0
192.168.1.1
192.168.1.2
...
192.168.1.255

vystupne data z tohto sql su spravne az nato, ze mi ich triedi podla ip adresy, co vyzera potom asi takto>
192.168.1.0
192.168.1.1
192.168.1.10
192.168.1.100
192.168.1.101
...
192.168.1.255

id v tabulke nie je a prerobit tabulku by sa rovnalo prerobeniu velkej casti skriptu. zvlastnejsie vsak je ze niekedy to zoradi a niekedy nie, zalezi na tabulke ktorej taha data. a posledna pozoruhodnost je ze v php ked v php skripte ide sql pekne ako ma, tak v phpmyadmine ten isty sql zotriedi data tak, ako nechcem...

skusal som guglit, ale nenasiel som ziadny zachytny bod. kodovanie je na vsetkych strankach rovnake utf8-slovak-ci, ip adresy su ulozene ako varchar (15)

dakujem za radu
RockFire
Profil
Zkus mysql_query("select * from tabulka where ip='192.168.1.' ORDER BY ip"). Je to možná blbobst, ale nic jinýho mě nenapadá :-)
jan fabo
Profil *
ano, keby som pouzil takyto sql, tak vystyp zoradeny podla ip adries by bol korektny...ja ale chcem aby to nezoradilo, lebo vlastne to nemam podla coho zoradovat. ip adresy boli vlkadane do tabulky postupne skriptom, takze su za sebou ale takyto select to vsetko "rozhasi" :(
petr 6
Profil
jan fabo
Tak chces je seradit, nebo nechces?
TomášK
Profil
zkus ORDER BY INET_ATON(ip), to by je mohlo seřadit podle toho jak píšeš. Bez ORDER BY to databáze podle mě může setřídit jak chce, ale nejsem si tím jistý.
Kajman_
Profil *
Pro ukázkový příklad stačí seřadit podle velikosti a pak podle abecedy. Obecně to ale nefunguje. Můžete si ukládat ip jako součet těch 4 bytů. Tam pak bude řazení a některé druhy maskování rychlejší. Jen si to musíte zase převrátit na tečkový zápis při výpisu.
jan fabo
Profil *
2 petr 6: chcem to zoradit podla ip adresy, ale to bude jedine vtedy, ak v sql nebude ziadna klauzula order by

myslim, ze problem bude niekde v db:
select * from subnet_1 where ip like "192.168.1.%"

v mojom skripte to ide v pohode, ale v phpmyadmine su vysledky zoradene stringovo podla ip adresy. ten isty sql.pridava pma nejake klauzulky ktore nevidiet?
Kajman_
Profil *
Když nedáte order by, tak databáze může vrátit výsledky v libovolném pořadí.
jan fabo
Profil *
toto
select * from subnet_1
vypise zaznamy z tabulky bez zoradenia v poradi v akom boli vkladane, co v konecnom dosledku znamena ze su zoradene.
toto
select * from subnet_1 where ip like "192.168.1.%"
vrati rovnake vysledky, ale ip adresy su usporiadane tak ako nechcem :(
ninja
Profil
Když nedáte order by, tak databáze může vrátit výsledky v libovolném pořadí.
tiso
Profil
jan fabo - nenapísal si ako ich chceš mať usporiadané.
jan fabo
Profil *
2 kajman&ninja: ja chapem :)
1. ale nie je to uplna pravda, pretoze ked nedam order by tak vysledky su vzdy v ROVNAKOM poradi, aj ked bez zotriedenia. tuto skutocnost zrejme vyuziva aplikacia ktoru opravujem. v db je asi 30 sieti=tabuliek a na vsetkych to funguje okrem dvoch novopridanych, ale ziaden rozdiel v tabulkach som nenasiel, iba v pocte zaznamov.
2. zaujima ma preco moj skript (a teraz som zistil ze aj mysql konzola) vracia vysledky inak ako phpmyadmin...ale toto nie je az take podstatne
3. no chcel som sa tomu vyhnut ale asi to inak nepojde: jedine vychodisko bude asi prerobit vsetky tabulky pridanim pola id, updatovanim tohto pola na poradove cislo a potom ho zmenit na automaticke pole a index...neviem ci to je najlepsie riesenie ale fungovat by to mohlo
jan fabo
Profil *
usporiadane ich chcem mat takto
192.168.1.0
192.168.1.1
192.168.1.2
...
192.168.1.255


a NIE takto
192.168.1.0
192.168.1.1
192.168.1.10
192.168.1.100
192.168.1.101
...
192.168.1.255
tiso
Profil
jan fabo
ORDER BY LENGTH(ip) ASC, ip ASC
jan fabo
Profil *
2 tiso: wow pekny workaround, takto to ide - RE5PECT.

uz zostava len otazka rozdielne usporiadanych vysledkov skriptu a phpmyadmina pri rovnakom sql, co bude sposobene pravdepodobne nejakou optimalizaciou v pma, ale teraz je to uz bezpredmetne.

kazdopadne velka vdaka :)
Toto téma je uzamčeno. Odpověď nelze zaslat.