Hi All,

I'm attempting to generate a report of page hits from both internal and
external IP addresses, from one table, using self join.

Some sample data:

+--------+-------------+----------------+------------+
| hit_no | page_name   | ip             | hit_time   |
+--------+-------------+----------------+------------+
|   6649 | printing    | 10.77.1.128    | 1061362239 |
|   6650 | wireless    | 10.77.28.100   | 1061365331 |
|   6651 | after_hours | 10.77.31.101   | 1061365461 |
|   6632 | labtimes    | 10.77.25.102   | 1061350012 |
|   6633 | after_hours | 10.77.25.102   | 1061350017 |
|   6634 | labtimes    | 10.77.25.102   | 1061350325 |
|   6635 | practise    | 10.77.30.114   | 1061350609 |
|   6636 | support     | 10.19.7.155    | 1061352345 |
|   6637 | help        | 203.35.134.16  | 1061352351 |
|   6638 | support     | 10.19.7.156    | 1061352352 |
|   6639 | support     | 10.19.7.151    | 1061352387 |
|   6640 | support     | 10.19.7.159    | 1061352411 |
|   6621 | support     | 10.19.7.158    | 1061348961 |
|   6620 | support     | 10.19.6.112    | 1061348628 |
|   7318 | labtimes    | 202.137.192.7  | 1063262879 |
|   6284 | conditions  | 10.77.31.109   | 1060605402 |
|   7317 | practise    | 202.137.192.7  | 1063262789 |
|   7316 | wireless    | 203.59.185.185 | 1063262707 |
|   7315 | wireless    | 10.77.28.121   | 1063256685 |
+--------+-------------+----------------+------------+

I'm trying to generate a report like this: (Which I've done in TWO
querys, the copied and pasted together)

+-------------+----------+----------+
| Page Name   | Internal | External |
+-------------+----------+----------+
| after_hours |      615 |      105 |
| conditions  |      332 |       50 |
| faq         |       89 |        2 |
| help        |      458 |      174 |
| labtimes    |      682 |      143 |
| support     |     2151 |      383 |
| passwords   |      154 |       22 |
| practise    |      497 |       99 |
| printing    |      801 |       85 |
| wireless    |      926 |      180 |
+-------------+----------+----------+

Using a query like this:

SELECT DISTINCT i.page_name AS 'Page Name', COUNT(i.page_name) as
'Internal', COUNT(e.page_name) as 'External'
FROM ip_logs i, ip_logs e
WHERE (i.hit_no != e.hit_no)
AND (i.ip LIKE '10.%' OR i.ip LIKE '139.230.%')
#Internal Addresses
AND (e.ip NOT LIKE '10.%' AND e.ip NOT LIKE '139.230.%')
#External Addresses
GROUP BY i.page_name;

The query takes between 30 seconds and 4.5 minutes to process 6000 rows,
depending upon what extra WHERE conditions I put in (like i.hit_no =
e.hit_no, or i.page_name = e.page_name etc), the result of which looks
like:

+-------------+----------+----------+
| Page Name   | Internal | External |
+-------------+----------+----------+
| after_hours |   638520 |   638520 |
| conditions  |   353064 |   353064 |
| faq         |   108924 |   108924 |
| help        |   355568 |   355568 |
| labtimes    |   674828 |   674828 |
| oracle      |  2213536 |  2213536 |
| passwords   |   165264 |   165264 |
| practise    |   498296 |   498296 |
| printing    |   896432 |   896432 |
| wireless    |   933992 |   933992 |
+-------------+----------+----------+

Can anyone offer any suggestions as to the problem with my logic?

Regards,

James Katarski
Systems Administrator
School of Computer & Information Science
Edith Cowan University ML


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

Reply via email to