Hello.


Usually working with IP addresses in a numeric form is faster. Use

INET_NTOA() and INET_ATON() functions to store IP addresses as unsigned

ints. To work with subnetworks  instead of "like 'xxx.xxx.%'" use 

"ip_address_in_numeric_form between inet_aton('xxx.xxx.0.0') and

inet_aton('xxx.xxx.255.255')" or similar condition (check if between

covers the borders of the subnet). %php% are usually slow. Force your

application which inserts data to the database explicitly determine

the type of the content (perhaps, you should add a field which will

indicate the content. I agree, that this is a superfluity, however 

the speed of the query is more important).





"Jay Paulson (CE CEN)" <[EMAIL PROTECTED]> wrote:

>Below is a query I'm trying to create and the sql for the table I'm pulling the

>information out of.  The query is definitely not the best query out there 
>especially

>since I'm still pretty new with sql.  I know there has to be a better way of 
>getting the

>information I want.  A little background.  I'm parsing an Apache access_log 
>file and

>throwing it all into a DB so I can run some reports on it.  What I'm wanting 
>to get are

>certain file types that were downloaded (in this case all .html, .php, .pdf, 
>.doc, and

>.flv files) in a certain date range but grouped by certain ip addresses.  Some 
>groups of

>ips might have 2 or 3 subnets it needs to get (ie xxx.xxx.% and yyy.yyy.%).  
>What needs

>to be returned is the count of all the file types that have been downloaded 
>but grouped

>by certain ips that I'm looking for.  

>

>I hope I didn't confuse anything because I think I confused myself! ;)

>

>Thanks for any help!

>

>CREATE TABLE `apache_statslog` (

>  `STATS_ID` int(11) NOT NULL auto_increment,

>  `ip` varchar(25) default NULL,

>  `accesstime` datetime default NULL,

>  `thepage` varchar(250) default NULL,

>  `thetype` varchar(25) default NULL,

>  `thecode` char(3) default NULL,

>  `thebytes` int(11) default NULL,

>  `theref` varchar(250) default NULL,

>  `browser` varchar(250) default NULL,

>  PRIMARY KEY  (`STATS_ID`),

>  KEY `ip` (`ip`),

>  KEY `accesstime` (`accesstime`),

>  KEY `thepage` (`thepage`)

>) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=59145 ;

>

>

>

>SELECT count(swrm.ip) as swrm_page_hits, count(mw.ip) as mw_page_hits, 
>count(fl.ip) as

>fl_page_hits, count(so.ip) as so_page_hits

>

>FROM apache_statslog as swrm, apache_statslog as mw, apache_statslog as fl,

>apache_statslog as so

>

>WHERE (swrm.accesstime >= '2006-01-01 00:00:00' AND swrm.accesstime <= 
>'2006-01-04

>23:59:59') 

>       AND (swrm.ip LIKE 'xxx.xxx.%' OR swrm.ip LIKE 'xxx.xxx.%' OR swrm.ip 
> LIKE 'xxx.xxx.%')  

>#this is a group that needs to return a count

>       AND (mw.ip LIKE 'xxx.xxx.%' OR mw.ip LIKE 'xxx.xxx.%')   #this is a 
> group that needs to

>return a count

>       AND (fl.ip LIKE 'xxx.xxx.%' OR fl.ip LIKE 'xxx.xxx.%')   #this is a 
> group that needs to

>return a count

>       AND (so.ip LIKE 'xxx.xxx.%' OR so.ip LIKE 'xxx.xxx.%')   #this is a 
> group that needs to

>return a count

>

>       AND (swrm.thepage LIKE '%.html%' OR swrm.thepage LIKE '%.php%' OR 
> swrm.thepage LIKE

>'%.doc%' OR swrm.thepage LIKE '%.pdf%' OR swrm.thepage LIKE '%.flv%')

>

>ORDER BY swrm.accesstime ASC



-- 
For technical support contracts, goto https://order.mysql.com/?ref=ensita
This email is sponsored by Ensita.NET http://www.ensita.net/
   __  ___     ___ ____  __
  /  |/  /_ __/ __/ __ \/ /    Gleb Paharenko
 / /|_/ / // /\ \/ /_/ / /__   [EMAIL PROTECTED]
/_/  /_/\_, /___/\___\_\___/   MySQL AB / Ensita.NET
       <___/   www.mysql.com




-- 
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to