2017-09-08 55 views
-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); 
?> 
+0

我一直在尋找的答案就在這裏https://stackoverflow.com/questions/46141917/ip-accounting-display -from-sql-proper-sql-query –

回答

0

試試這個:

$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"; 
+0

我已經試過了,我得到的輸出爲: '警告:mysqli_fetch_array()期望參數1是/ var/www/html/test中給出的mysqli_result,布爾值。 28線上的php –