【发布时间】:2017-09-10 19:36:11
【问题描述】:
我需要使用以下代码将用户数据包加入 IP 记帐
SELECT ip_address, SUM(upload_bytes) as upload_bytes, SUM(download_bytes) as
download_bytes
FROM ((SELECT src_address as ip_address, SUM(bytes) AS upload_bytes, 0 as
download_bytes
FROM ipaccounting
WHERE src_address BETWEEN ('192.168.0.1') AND ('192.168.255.254') AND
dst_address NOT BETWEEN ('192.168.0.1') AND ('192.168.255.254') GROUP BY
src_address)
UNION ALL (SELECT dst_address, 0 AS upload_bytes, SUM(bytes) as
download_bytes
FROM ipaccounting WHERE dst_address BETWEEN ('192.168.0.1') AND
('192.168.255.254') AND src_address NOT BETWEEN ('192.168.0.1') AND
('192.168.255.254') GROUP BY dst_address))
a GROUP BY ip_address
My SQL 数据库有 3 个表:ipaccounting、users 和 datapackages。 每个数据包都有一个唯一的ID,ID在users表的datapackage列中指定,IP地址在users表中指定。
我需要加入用户数据包信息和IP地址,这样它才会回显:
IP 地址 |上传字节 |下载字节 |总字节数 |数据包ID |用户名
我的整个代码:
<?php
//Include needed files
require ("config.php");
include ("includes/formatbytes.php");
//Connect to database
$conn = mysqli_connect($SQLserver, $SQLusername, $SQLpassword,
$SQLdatabase);
if (!$conn) {
die("Could not connect: " . mysqli_connect_error());
}
//Convert IP Addresses
$IPRangeStart = ip2long($IPRangeStart);
$IPRangeEnd = ip2long($IPRangeEnd);
//Query database
$query = "
SELECT ip_address, SUM(upload_bytes) as upload_bytes,
SUM(download_bytes) as download_bytes
FROM ((SELECT src_address as ip_address, SUM(bytes) AS upload_bytes, 0
as download_bytes
FROM ipaccounting
WHERE src_address BETWEEN INET_NTOA($IPRangeStart) AND
INET_NTOA($IPRangeEnd) AND dst_address NOT BETWEEN INET_NTOA($IPRangeStart)
AND
INET_NTOA($IPRangeEnd) GROUP BY src_address)
UNION ALL (SELECT dst_address, 0 AS upload_bytes, SUM(bytes) as
download_bytes FROM ipaccounting WHERE dst_address BETWEEN
INET_NTOA($IPRangeStart) AND INET_NTOA($IPRangeEnd) AND src_address NOT
BETWEEN
INET_NTOA($IPRangeStart) AND INET_NTOA($IPRangeEnd) GROUP BY dst_address))
a GROUP BY ip_address ORDER BY INET_ATON(ip_address)";
//Execute query
$result = mysqli_query($conn,$query);
//Display IP information
echo "<table>";
echo "<tr><th>IP Address</th><th>Upload</th><th>Download</th><th>Total</th>
</tr>";
while($row = mysqli_fetch_array($result)) {
$ip_address = $row['ip_address'];
$upload_bytes = $row['upload_bytes'];
$download_bytes = $row['download_bytes'];
$total_bytes = ($upload_bytes + $download_bytes);
$total_bytes = formatBytes($total_bytes);
$upload_bytes = formatBytes($upload_bytes);
$download_bytes = formatBytes($download_bytes);
echo "<tr><td>".$ip_address."</td><td>".$upload_bytes."</td>
<td>".$download_bytes."</td><td>".$total_bytes."</td></tr>";
}
echo "</table>";
mysqli_close($conn);
?>
【问题讨论】:
-
您的查询完成了吗?您的查询结果与预期结果有何不同?
-
我的查询只获取会计数据,我不知道如何将用户与他们的会计数据连接起来,我需要回显用户名和数据包 ID,我将用我的整个代码更新我的问题
-
ipaccounting表有datapackageid列吗?
-
不,我有一个datapackage表,users表和ipaccounting表,我想通过users中的ipaddress列和users中的datapackageid列将用户与ipaccounting数据匹配,每个数据包都有一个唯一的ID和用户datapackageip必须指向datapackage表中的datapackage