-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 –