« 1 2
Autor Zpráva
Kajman_
Profil *
Vždy se snažte neupravovat sloupec ale hodnotu, se kterou ho porovnáváte...
where ip.IP between INET_ATON('172.23.5.0') AND INET_ATON('172.23.5.255')


Index na sloupci IP to zrychlí, ale může být náročnější na úpravy a zabrané místo.
siginigin
Profil *
Kajman - prerobil som to tak, že som si ručne vypočítal koncovú adresu. funguje to, ale to vlastne nie je to, čo som chcel. keď user zadá "172.23.5", tak vo výsledku budú adresy:
172.23.5.0,172.23.5.1,...,172.23.5.255,172.23.6.0,...,172.23.59.255

chcel by som ale takýto výsledok:
172.23.5.0,172.23.5.1,...,172.23.5.255,172.23.50.0,...,172.23.59.255

čiže všetky adresy, ktoré začínajú na zadanie. toto splňuje sql, čo som napísal (inet_ntoa(ip.IP) like "172.23.5%"), čo je však extrémne pomalé :(
a druhá vec, pri súčasnom návrhu databázy mi nebude korektne fungovať LIMIT, pretože vo výsledku sú síce ip adresy, ale jedna adresa sa opakuje 80 krát, pretože každá má 80 polí z tabuľky ip_info, takže keď dám LIMIT 0, 19 bude to stále len jedna ip adresa a jej 20 polí. toto by som riešil asi iba tak, že selectnem potrebné ip adresy a potom pre každú samostatne budem vyberať polia z ip_info, len sa zase bojím, že to bude pomalé.

alebo máte niekto lepší nápad?

vďaka za radu.
Kajman_
Profil *
prerobil som to tak, že som si ručne vypočítal koncovú adresu.
Přeprogramujte si ten výpočet na korektní intervaly, které vyžadujete a pokud je jich víc, pak je zapište přes or.

Pro jedinečné ip můžete použít např. slovíčko distinct - pak bude limit fungovat, jak potřebujete.

select distinct ip.IP from....
where ip.IP between INET_ATON('172.23.5.0') AND INET_ATON('172.23.5.255')
OR  ip.IP between INET_ATON('172.23.50.0') AND INET_ATON('172.23.59.255')
siginigin
Profil *
zdravím,
tak som to si vyrobil podľa Kajmana funkciu v php, ktorá vytvorí takýto sql príkaz rovno už s číslami ip adries. Keď dám vyhľadať iba ip adresu z tabuľky ip to pri maximálnom počte podmienok 111 (zadanie napr. "172.1") to napočudovanie zaberie iba 0.0080s. V prípade záujmu ju sem môžem postnúť.
Vyhľadávanie som sa rozhodol urobiť na 3x v dvoch variantách:
1.1. ak user zadá časť ip adresy, prehľadá sa tabuľka ip -> z tohto získam celkový počet ip adries
1.2. znova taký istý sql s použítím LIMIT a výsledok sa uloží do tempu
1.3. left join temp a ip_info
alebo
2.1. ak user zadá niečo, čo nebude ip adresa, budem to považovať za parameter a prehľadám tabuľku ip_info a výsledok uložím do tempu
2.2. right join ip a temp s použitím group by na ip.IP -> získam celkový počet ip adries
2.3. right join ip a temp

ostáva mi tu jeden problém a to pri 2.2 ako orezať výsledok pomocou LIMIT aby som mohol vypísať len toľko adries, koľko si user zadal vo svojom profile.
Kajman_
Profil *
2.2
např.
select * from
(select distinct ip from tabulka limit 30) t
right join temp on t.IP=temp.IP
group by...


maximálnom počte podmienok 111 (zadanie napr. "172.1")
Není maximální počet podmínek 3?
172.1.0.0-172.1.255.255
172.10.0.0-172.19.255.255
172.100.0.0-172.199.255.255
« 1 2

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0