![](/img/trans.png)
[英]PHP - Query single value per iteration or fetch all at start and retrieve from array?
[英]Cannot retrieve value of extra query per record?
我在一個表上工作,從數據庫中選擇用戶的數據。
問題是我無法在我的while條件下放兩個語句,因為我從不同的表和行中獲取數據。
@碼
<?php
$con = mysql_connect("localhost", "username", "password") or die(mysql_error());
mysql_select_db("database_name") or die(mysql_error());
$result = mysql_query("select * FROM users");
$space_used = mysql_query("SELECT SUM(fileSize) FROM file WHERE file.userId=users.id AND file.statusId=1");
$total_files = mysql_query("SELECT COUNT(id) FROM file WHERE file.userId=users.id AND file.statusId=1");
echo "<table class='table table-striped table-hover table-bordered' id='sample_editable_1'>
<tr>
<th>Username</th>
<th>Type</th>
<th>Email</th>
<th>Last Login</th>
<th>Last IP</th>
<th>space_used</th>
<th>total_files</th>
<th>status</th>
</tr>";
while($row = mysql_fetch_array($result))
{
echo "<tr>";
echo "<td>" . $row['username'] . "</td>";
echo "<td>" . $row['level'] . "</td>";
echo "<td>" . $row['email'] . "</td>";
echo "<td>" . $row['lastlogindate'] . "</td>";
echo "<td>" . $row['lastloginip'] . "</td>";
echo "<td>" . $space_used['space_used'] . "</td>";
echo "<td>" . $total_files['total_files'] . "</td>";
echo "<td>" . $row['status'] . "</td>";
echo "</tr>";
}
echo "</table>";
mysql_close($con);
?>
我得到的是用戶名,級別,電子郵件,lastlogindate,lastloginip和status的所有值。 我沒有在我的桌子上顯示的兩個是我想要實現的第二個條件:space_used和total_files。
我究竟做錯了什么? 我不是PHP的專家,事實上我有一個混合的教程和一個腳本即時通信來獲得這個結果有點復雜。
謝謝
您希望按userId聚合。
將這兩個查詢拉入while循環。 使用檢索到的用戶id
進行聚合查詢。
while($row = mysql_fetch_array($result))
{
$space_used = mysql_query("SELECT SUM(fileSize) FROM file WHERE file.userId={$row['id']} AND file.statusId=1");
$total_files = mysql_query("SELECT COUNT(id) FROM file WHERE file.userId={$row['id']} AND file.statusId=1");
...
}
將它們組合成一個查詢。
$agragateDataResponce = mysql_query("SELECT SUM(fileSize) as size,
COUNT(id) as count
FROM file
WHERE file.userId={$row['id']} AND
file.statusId=1");
$agragateData = mysql_fetch_array($agragateDataResponce);
通過訪問 $agragateData['size']
和$agragateData['count']
;
然后查找如何將剩余的兩個SQL組合成一個連接:)。 關於主題的問題
您需要重新編寫查詢,可以使用JOIN
將3個查詢恢復為單個查詢:
SELECT u.*,
SUM(f.fileSize) AS space_used,
COUNT(f.id) AS total_files
FROM users u
JOIN file f
ON f.userId = u.id AND f.statusId = 1
GROUP BY u.id
然后你可以這樣讀:
<?php
// your database info
$db_host = 'your MySQL server host';
$db_user = 'your username';
$db_pass = 'your password';
$db_name = 'your database name';
$con = new mysqli($db_host, $db_user, $db_pass, $db_name);
if($con->connect_error)
{
die('Connect Error (' . mysqli_connect_errno() . ') '. mysqli_connect_error());
}
if (!$result = $con->query("SELECT u.*,
SUM(f.fileSize) AS space_used,
COUNT(f.id) AS total_files
FROM users u
JOIN file f
ON f.userId = u.id AND f.statusId = 1
GROUP BY u.id"))
{
die('Select query error: ' . $con->error);
}
?>
<table class='table table-striped table-hover table-bordered' id='sample_editable_1'>
<tr>
<th>Username</th>
<th>Type</th>
<th>Email</th>
<th>Last Login</th>
<th>Last IP</th>
<th>space_used</th>
<th>total_files</th>
<th>status</th>
</tr>
<?php
while ($row = $result->fetch_array())
{
?>
<tr>
<td><?php echo $row['username']; ?></td>
<td><?php echo $row['level']; ?></td>
<td><?php echo $row['email']; ?></td>
<td><?php echo $row['lastlogindate']; ?></td>
<td><?php echo $row['lastloginip']; ?></td>
<td><?php echo $row['space_used']; ?></td>
<td><?php echo $row['total_files']; ?></td>
<td><?php echo $row['status']; ?></td>
</tr>
<?php
}
$con->close();
?>
</table>
首先查詢數據庫並將結果保存到變量中。
$result = mysql_query("select * FROM users");
$space_used = mysql_query("SELECT SUM(fileSize) FROM file WHERE file.userId=users.id AND file.statusId=1");
$total_files = mysql_query("SELECT COUNT(id) FROM file WHERE file.userId=users.id AND file.statusId=1");
然后用你的第一個結果迭代
while($row = mysql_fetch_array($result))
注意你對mysql_fetch_array
的調用。 你永遠不會在另外兩個結果上調用mysql_fetch_array
。
有關更多詳細信息,請參閱有關mysql_query
的PHP文檔 。 具體而言,返回類型是資源 。
返回的結果資源應該傳遞給mysql_fetch_array(),以及其他用於處理結果表的函數,以訪問返回的數據。
然而,
SELECT SUM(fileSize) FROM file WHERE file.userId=users.id AND file.statusId=1
甚至不是你想要的。 您檢查file.userId=users.id
但只讀取file
表。 您缺少用戶源表。
嘗試使用
$space_used = mysql_query("SELECT SUM(fileSize)
FROM file
WHERE file.userId=users.id AND
file.statusId=1");
$total_files = mysql_query("SELECT COUNT(id)
FROM file
WHERE file.userId=users.id AND
file.statusId=1");
在While
內部的上面的行,並與user.id
驗證
我是stackoverflow的新手,所以不要我的。 我不知道如何使代碼看起來像每個人
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.