0

ユーザーからのデータがデータベースから選択されるテーブルに取り組んでいます。

問題は、異なるテーブルと行からデータを取得しているため、while 条件に 2 つのステートメントを配置できないことです。

@コード

<?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、およびステータスのすべての値です。私のテーブルに表示されていない 2 つは、実装したい 2 番目の条件のものです: space_used と total_files。

私は何を間違っていますか?私は PHP の専門家ではありません。この結果を得るためにチュートリアルとスクリプトが混在していたという事実は、少し複雑でした。

ありがとう

4

4 に答える 4

1

クエリを作り直す必要があります。次を使用して、3 つのクエリを 1 つのクエリに再開できますJOIN

  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>
于 2013-08-19T22:16:11.620 に答える
0

使ってみて

$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が初めてなので、私のものではありません。コードを他の人のように見せる方法がわからない

于 2013-08-19T22:20:25.847 に答える
0

まず、データベースにクエリを実行し、結果を変数に保存します。

$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_arraymysql_fetch_array他の 2 つの結果を呼び出すことはありません。

詳細については、PHP のドキュメントをmysql_query参照してください。具体的には、戻り値の型はresourceです。

返された結果リソースは、返されたデータにアクセスするために、mysql_fetch_array() および結果テーブルを処理するためのその他の関数に渡される必要があります。

でも、

SELECT SUM(fileSize) FROM file WHERE file.userId=users.id AND file.statusId=1

あなたが望むものでさえありません。チェックしますが、テーブルfile.userId=users.idから読み取るだけです。fileユーザー ソース テーブルがありません。

于 2013-08-19T22:02:54.520 に答える