Hi
I have a user who needs to do the following
[snip]
I believe I will need sub-selects for the following type of query. Subqueries
are not supported until MySQL 4.1.
I will need to do longest-match lookups in the DB to mimic the way that IP
routers do longest-match routing lookups.
In the most basic case, I will have the following table entries that I
need to do a bitwise-AND comparison on and output ONLY the most-specific
route match. There will be other columns, but this should suffice to
illustrate why sub-queries are required:
CREATE TABLE as_aggregate (
as_num INTEGER,
ipaddr_val INTEGER,
netmask_val INTEGER,
prefix_length SMALLINT);
CREATE TABLE static_route (
router VARCHAR(32),
ipaddr_val INTEGER,
netmask_val INTEGER,
prefix_length SMALLINT,
next_hop_val INTEGER);
And then I need rows matching only the most specific bitwise-AND between
the static_route table and the as_aggregate table:
SELECT sr.router,
sr.ipaddr_val,
sr.prefix_length
sr.OTHER_COLUMNS
aa.as_num,
aa.ipaddr_val,
aa.netmask_val,
aa.OTHER_COLUMNS
FROM as_aggregate aa,
(SELECT sr.router,
sr.ipaddr_val,
sr.prefix_length,
MAX(msaa.prefix_length) AS most_specific_length
FROM static_route sr,
as_aggregate msaa
WHERE sr.ipaddr_val & msaa.netmask_val =
msaa.ipaddr_val & msaa_netmask_val
GROUP BY sr.router,
sr.ipaddr_val,
sr.prefix_length )
WHERE sr.ipaddr_val & msaa.netmask_val =
msaa.ipaddr_val & sr.netmask_val
AND aa.prefix_length = most_specific_length;
-----------------------------------------------------------------
I would prefer not to create temporary tables because:
* this data will change a lot as I tweak it and poll routers over and
over
* the size of the temporary table will be O(routes * as_aggregate)
* I am going to index all the columns that do bitwise AND so that row
pairings can be made by consulting the index only. This should make
the most-specific comparison nice and fast.
Also, I may have to do two levels of most-specific indirection for complex
route resolution. This will further complicate temporary tables.
[/snip]
Now My question is if there any possible way I can stick to the current
installation MySQL 4.0.13 and have the user do his job with some workaround ?
Thanks for your suggestions
--
Asif Iqbal
http://pgpkeys.mit.edu:11371/pks/lookup?op=get&search=0x8B686E08
There's no place like 127.0.0.1
--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]