fLaSh_CF
Banido
Boas;
Estou com uma duvida em relação ao comando BETWEEN..
Preciso de obter o Tops Contries de uma BD em SQLite..
Fiz o query da seguinte forma e functiona.. (CODE)
O problema é que está um pouco lento, precisava de optimizar o query..
Já experimentei desta forma, mas não funciona.. (a condição..)
Se alguem poder ajudar ..
Assim funciona, mas demora cerca de 1 minuto o query ..
A ideia é apresentar os resultados da seguinte forma:
Notas:
*A base de dados tem cerca de 3,2 milhões de IP ranges, eu penso que se o query for bem optimizado fica muito mais rapido..
*Um query unico demora cerca de 0.5~2 segundos..
Ex:
Table Schema (2 tabelas):
Compr.
Estou com uma duvida em relação ao comando BETWEEN..
Preciso de obter o Tops Contries de uma BD em SQLite..
Fiz o query da seguinte forma e functiona.. (CODE)
O problema é que está um pouco lento, precisava de optimizar o query..
Já experimentei desta forma, mas não funciona.. (a condição..)
WHERE 1401213123 or 1384067172 or ..... or .... or ... etc...
BETWEEN blocks.start_ip_num AND blocks.end_ip_num
Se alguem poder ajudar ..
Código:
SELECT DISTINCT country, COUNT(country) AS TOTAL
FROM blocks JOIN locations ON blocks.loc_id = locations.loc_id
WHERE (1486149509 BETWEEN blocks.start_ip_num AND blocks.end_ip_num)
OR (2537819614 BETWEEN blocks.start_ip_num AND blocks.end_ip_num)
OR (701684425 BETWEEN blocks.start_ip_num AND blocks.end_ip_num)
OR (2130706433 BETWEEN blocks.start_ip_num AND blocks.end_ip_num)
OR (1495497275 BETWEEN blocks.start_ip_num AND blocks.end_ip_num)
OR (1437975106 BETWEEN blocks.start_ip_num AND blocks.end_ip_num)
OR (3575017176 BETWEEN blocks.start_ip_num AND blocks.end_ip_num)
OR (1356762882 BETWEEN blocks.start_ip_num AND blocks.end_ip_num)
OR (1310809035 BETWEEN blocks.start_ip_num AND blocks.end_ip_num)
OR (1436948856 BETWEEN blocks.start_ip_num AND blocks.end_ip_num)
OR (1265441955 BETWEEN blocks.start_ip_num AND blocks.end_ip_num)
OR (1440990995 BETWEEN blocks.start_ip_num AND blocks.end_ip_num)
OR (1404512164 BETWEEN blocks.start_ip_num AND blocks.end_ip_num)
OR (1413143436 BETWEEN blocks.start_ip_num AND blocks.end_ip_num)
OR (1217187988 BETWEEN blocks.start_ip_num AND blocks.end_ip_num)
OR (1491831804 BETWEEN blocks.start_ip_num AND blocks.end_ip_num)
OR (3362243165 BETWEEN blocks.start_ip_num AND blocks.end_ip_num)
OR (1364484315 BETWEEN blocks.start_ip_num AND blocks.end_ip_num)
OR (1351251084 BETWEEN blocks.start_ip_num AND blocks.end_ip_num)
OR (1446856464 BETWEEN blocks.start_ip_num AND blocks.end_ip_num)
OR (1414245739 BETWEEN blocks.start_ip_num AND blocks.end_ip_num)
OR (1332754719 BETWEEN blocks.start_ip_num AND blocks.end_ip_num)
OR (1334197131 BETWEEN blocks.start_ip_num AND blocks.end_ip_num)
OR (1333236289 BETWEEN blocks.start_ip_num AND blocks.end_ip_num)
OR (1393808330 BETWEEN blocks.start_ip_num AND blocks.end_ip_num)
OR (1295438787 BETWEEN blocks.start_ip_num AND blocks.end_ip_num)
OR (1502508649 BETWEEN blocks.start_ip_num AND blocks.end_ip_num)
OR (1318873170 BETWEEN blocks.start_ip_num AND blocks.end_ip_num)
OR (1545949891 BETWEEN blocks.start_ip_num AND blocks.end_ip_num)
OR (1314528380 BETWEEN blocks.start_ip_num AND blocks.end_ip_num)
OR (1474280303 BETWEEN blocks.start_ip_num AND blocks.end_ip_num)
OR (2439230330 BETWEEN blocks.start_ip_num AND blocks.end_ip_num)
OR (1314174166 BETWEEN blocks.start_ip_num AND blocks.end_ip_num)
OR (1333070193 BETWEEN blocks.start_ip_num AND blocks.end_ip_num)
OR (3273849874 BETWEEN blocks.start_ip_num AND blocks.end_ip_num)
OR (1589488396 BETWEEN blocks.start_ip_num AND blocks.end_ip_num)
OR (3582727755 BETWEEN blocks.start_ip_num AND blocks.end_ip_num)
OR (1415218381 BETWEEN blocks.start_ip_num AND blocks.end_ip_num)
OR (1478288548 BETWEEN blocks.start_ip_num AND blocks.end_ip_num)
OR (1364503911 BETWEEN blocks.start_ip_num AND blocks.end_ip_num)
OR (1414262933 BETWEEN blocks.start_ip_num AND blocks.end_ip_num)
OR (1332905661 BETWEEN blocks.start_ip_num AND blocks.end_ip_num)
OR (1333011343 BETWEEN blocks.start_ip_num AND blocks.end_ip_num)
OR (1330877193 BETWEEN blocks.start_ip_num AND blocks.end_ip_num)
OR (1435199056 BETWEEN blocks.start_ip_num AND blocks.end_ip_num)
OR (1472464343 BETWEEN blocks.start_ip_num AND blocks.end_ip_num)
OR (1333070716 BETWEEN blocks.start_ip_num AND blocks.end_ip_num)
OR (1460131478 BETWEEN blocks.start_ip_num AND blocks.end_ip_num)
OR (1549004602 BETWEEN blocks.start_ip_num AND blocks.end_ip_num)
OR (2197024396 BETWEEN blocks.start_ip_num AND blocks.end_ip_num)
OR (1144987038 BETWEEN blocks.start_ip_num AND blocks.end_ip_num)
OR (1385839702 BETWEEN blocks.start_ip_num AND blocks.end_ip_num)
OR (3653734094 BETWEEN blocks.start_ip_num AND blocks.end_ip_num)
OR (1332938430 BETWEEN blocks.start_ip_num AND blocks.end_ip_num)
OR (1332931591 BETWEEN blocks.start_ip_num AND blocks.end_ip_num)
OR (1449725108 BETWEEN blocks.start_ip_num AND blocks.end_ip_num)
OR (1385922226 BETWEEN blocks.start_ip_num AND blocks.end_ip_num)
GROUP BY country
ORDER BY TOTAL
A ideia é apresentar os resultados da seguinte forma:
-----------------------
País -------------Total
-----------------------
Portugal -------- 120
França --------- 90
USA ------------ 50
Espanha -------- 60
etc...............------
-----------------------
Notas:
*A base de dados tem cerca de 3,2 milhões de IP ranges, eu penso que se o query for bem optimizado fica muito mais rapido..
*Um query unico demora cerca de 0.5~2 segundos..
Ex:
Código:
SELECT SELECT country, region, city, postal_code, latitude, longitude, dma_code, area_code
FROM blocks JOIN locations ON blocks.loc_id = locations.loc_id
WHERE 1401213123 BETWEEN blocks.start_ip_num AND blocks.end_ip_num
LIMIT 1
Table Schema (2 tabelas):
TABLE blocks (
start_ip_num bigint not null,
end_ip_num bigint not null,
loc_id integer not null)
TABLE locations (
loc_id integer not null primary key,
country varchar(2) not null,
region varchar(2),
city varchar(255),
postal_code varchar(10),
latitude double,
longitude double,
dma_code integer,
area_code integer)
Compr.
Última edição: