2017-09-08 54 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 –