Php 嵌套子查询搜索

Php 嵌套子查询搜索,php,mysql,Php,Mysql,我有一个查询,可以从许多表中查找数据。 其中一个值是设备IP地址。 我有一个子查询,它使用这个IP地址,在不同的表中搜索IP地址的范围,如果在该范围内,则返回一个“vlan_id”。 在设备表中,ip地址字段称为“ip_添加”。IP地址存储为16位无符号整数 代码: 选择DISTINCT*, 设备id作为id, INET_NTOA(ip_添加)作为ip_添加c, INET_NTOA(mcast)作为mcast, INET_NTOA(查找)作为查找, 列表\u systype.systype\u标

我有一个查询,可以从许多表中查找数据。 其中一个值是设备IP地址。 我有一个子查询,它使用这个IP地址,在不同的表中搜索IP地址的范围,如果在该范围内,则返回一个“vlan_id”。 在设备表中,ip地址字段称为“ip_添加”。IP地址存储为16位无符号整数

代码:

选择DISTINCT*,
设备id作为id,
INET_NTOA(ip_添加)作为ip_添加c,
INET_NTOA(mcast)作为mcast,
INET_NTOA(查找)作为查找,
列表\u systype.systype\u标签,
列表\u chgstatus.chgstatus\u标签
来自“设备”
左连接设备上的itam_资产。itamname=itam_资产。ASSETID
左连接设备上的dnslookup.itamname=dnslookup.itamname
设备上的左连接列表\系统类型。系统类型=列表\系统类型。系统类型\值
itam_资产上的左联接列表_chgstatus.ASSETLIFECYCLESTATUS=list_chgstatus.chgstatus_值
其中系统名称如:s\u name\u in
//获得结果。。。。。
//获取设备数据
//选编
$database->query($query);
..
..  
foreach($行作为$行){
//在这个循环中,我有一个子查询来查找vlan\u id

$query=“从vlan\U agg中选择vlan\U id,其中:ip\u add>=ip\u sub和:ip\u add只需将另一个
左连接添加到查询中即可

SELECT DISTINCT *,
    equipment.id AS id, 
    INET_NTOA(ip_add) AS ip_add_c, 
    INET_NTOA(mcast) AS mcast, 
    INET_NTOA(lookup) AS lookup, 
    list_systype.systype_label,
    list_chgstatus.chgstatus_label,
    vlan_id
FROM `equipment` 
LEFT JOIN itam_asset on equipment.itamname=itam_asset.ASSETID 
LEFT JOIN dnslookup on equipment.itamname=dnslookup.itamname 
LEFT JOIN list_systype on equipment.systype=list_systype.systype_value
LEFT JOIN list_chgstatus on itam_asset.ASSETLIFECYCLESTATUS=list_chgstatus.chgstatus_value    
LEFT JOIN vlan_agg ON ip_add BETWEEN ip_subAND bcast  
WHERE system_name LIKE :s_name_in 

如果您的数据库支持通用表表达式,那么这可能是一种方法。请参阅以下进一步参考:您好,它是MYSQL。显然不支持通用表表达式。不过,感谢您的输入,我学到了一些新东西:)
        SELECT DISTINCT *,
                    equipment.id AS id, 
                    INET_NTOA(ip_add) AS ip_add_c, 
                    INET_NTOA(mcast) AS mcast, 
                    INET_NTOA(lookup) AS lookup, 
                    list_systype.systype_label,
                    list_chgstatus.chgstatus_label  
    FROM `equipment` 
    LEFT JOIN itam_asset on equipment.itamname=itam_asset.ASSETID 
    LEFT JOIN dnslookup on equipment.itamname=dnslookup.itamname 
    LEFT JOIN list_systype on equipment.systype=list_systype.systype_value
    LEFT JOIN list_chgstatus on itam_asset.ASSETLIFECYCLESTATUS=list_chgstatus.chgstatus_value

          IN (SELECT vlan_id FROM vlan_agg WHERE ip_add >= ip_sub AND ip_add <= bcast )

WHERE system_name LIKE :s_name_in
SELECT DISTINCT *,
    equipment.id AS id, 
    INET_NTOA(ip_add) AS ip_add_c, 
    INET_NTOA(mcast) AS mcast, 
    INET_NTOA(lookup) AS lookup, 
    list_systype.systype_label,
    list_chgstatus.chgstatus_label,
    vlan_id
FROM `equipment` 
LEFT JOIN itam_asset on equipment.itamname=itam_asset.ASSETID 
LEFT JOIN dnslookup on equipment.itamname=dnslookup.itamname 
LEFT JOIN list_systype on equipment.systype=list_systype.systype_value
LEFT JOIN list_chgstatus on itam_asset.ASSETLIFECYCLESTATUS=list_chgstatus.chgstatus_value    
LEFT JOIN vlan_agg ON ip_add BETWEEN ip_subAND bcast  
WHERE system_name LIKE :s_name_in