-2
我试图执行PHP中的查询选择从多个表中的数据,然后回声多行的的信息出来,多个查询和子查询
代码:
<?php
//Include needed files
include ("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());
}
//Query database
$query = "SELECT * , SUM(bytes) AS upload_bytes FROM ipaccounting WHERE
src_address BETWEEN(SELECT iprangestart FROM accountingipranges)AND(SELECT
iprangeend FROM accountingipranges) AND dst_address NOT BETWEEN (SELECT
iprangestart FROM excludeaccountingipranges) AND (SELECT iprangeend FROM
excludeaccountingipranges) GROUP BY src_address
";
//Execute query
$result = mysqli_query($conn,$query);
//Display IP information
echo "<table>";
echo "<tr><th>IP Address</th><th>Upload</th></tr>";
while($row = mysqli_fetch_array($result)) {
if (isset($row['src_address'])) {
$src_address = $row['src_address'];
$src_address = long2ip($src_address);
}
/*if (isset($row['dst_address'])) {
$dst_address = $row['dst_address'];
} */
if (isset($row['upload_bytes'])) {
$uploadbytes = $row['upload_bytes'];
$uploadbytes = formatBytes($uploadbytes);
}
echo "<tr><td>".$src_address."</td><td>".$uploadbytes."</td></tr>";
}
echo "</table>";
mysqli_close($conn);
?>
只要我在accountingipranges或excludeipaccountingranges多行我得到以下错误:
Warning: mysqli_query(): (21000/1242): Subquery returns more than 1 row in /var/www/html/test.php on line 18
也是它可能有两个查询:
$query = "SELECT * , SUM(bytes) AS upload_bytes FROM ipaccounting WHERE
src_address BETWEEN(SELECT iprangestart FROM accountingipranges)AND(SELECT
iprangeend FROM accountingipranges) AND dst_address NOT BETWEEN (SELECT
iprangestart FROM excludeaccountingipranges) AND (SELECT iprangeend FROM
excludeaccountingipranges) GROUP BY src_address
SELECT * , SUM(bytes) AS download_bytes FROM ipaccounting WHERE dst_address
BETWEEN(SELECT iprangestart FROM accountingipranges)AND(SELECT iprangeend
FROM accountingipranges) AND src_address NOT BETWEEN (SELECT iprangestart
FROM excludeaccountingipranges) AND (SELECT iprangeend FROM
excludeaccountingipranges) GROUP BY dst_address";
我需要我的脚本来回显上传字节,下载字节,然后总字节数(上传+下载字节),到目前为止我已经得到我的脚本来回显上传字节,但我不知道如何为多个查询做其余的编码。
我完整的脚本是:
<?php
//Include needed files
include ("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());
}
//Query database
$query = "SELECT * , SUM(bytes) AS upload_bytes FROM ipaccounting WHERE
src_address BETWEEN(SELECT iprangestart FROM accountingipranges)AND(SELECT
iprangeend FROM accountingipranges) AND dst_address NOT BETWEEN (SELECT
iprangestart FROM excludeaccountingipranges) AND (SELECT iprangeend FROM
excludeaccountingipranges) GROUP BY src_address";
//Execute query
$result = mysqli_query($conn,$query);
//Display IP information
echo "<table>";
echo "<tr><th>IP Address</th><th>Upload</th></tr>";
while($row = mysqli_fetch_array($result)) {
if (isset($row['src_address'])) {
$src_address = $row['src_address'];
$src_address = long2ip($src_address);
}
/*if (isset($row['dst_address'])) {
$dst_address = $row['dst_address'];
} */
if (isset($row['upload_bytes'])) {
$uploadbytes = $row['upload_bytes'];
$uploadbytes = formatBytes($uploadbytes);
}
echo "<tr><td>".$src_address."</td><td>".$uploadbytes."</td></tr>";
}
echo "</table>";
mysqli_close($conn);
?>
我一直在寻找的答案就在这里https://stackoverflow.com/questions/46141917/ip-accounting-display -from-sql-proper-sql-query –