0

データベースに2つのテーブルがあります

ここに画像の説明を入力してください

テーブルタスクのU_IDは、テーブルユーザーからのIDの外部キーです。

私のコードはこんな感じです

<?php
    require("common.php");
    if(empty($_SESSION['user']))
    {
        header("Location: login.php");
        die("Redirecting to login.php");
    }
    $query = "
        SELECT
            id,
            username,
            eID
        FROM users
        WHERE id <> '5'
    ";
    $query1 = "
        SELECT
            T_ID,
            task_tom,
            U_ID
        FROM tasks
        ORDER BY T_ID DESC LIMIT 1

    ";
    try
    {
        $stmt = $db->prepare($query);
        $stmt->execute();
    }
    catch(PDOException $ex)
    {
        die("Failed to run query: " . $ex->getMessage());
    }
    $rows = $stmt->fetchAll();

        try
    {
        $stmt1 = $db->prepare($query1);
        $stmt1->execute();
    }
    catch(PDOException $ex)
    {
        die("Failed to run query: " . $ex->getMessage());
    }
    $rows1 = $stmt1->fetchAll();
?>
<h1>Memberlist</h1>
<table border="1">
    <tr>
        <th>Username</th>
        <th>Employee ID</th>
        <th>Task</th>
    </tr>
    <?php foreach($rows as $row): foreach($rows1 as $row1): ?>
        <tr>
            <td><?php echo htmlentities($row['username'], ENT_QUOTES, 'UTF-8'); ?></td>
            <td><?php echo htmlentities($row['eID'], ENT_QUOTES, 'UTF-8'); ?></td>
            <td><?php echo $row1['task_tom']; ?></td>
           <?php endforeach; endforeach;?>
</table>
<br/>
<a href="edit_account.php">Edit Account</a><br /><a href="logout.php">Logout</a>  

私の質問は、テーブルのタスク列に正しいU_IDに対応するものを入力するにはどうすればよいですか。
このコードは私にこの答えを提供します

ここに画像の説明を入力してください

おそらく、SSIS(データマイニング)はbassilに割り当てられたtask_tomであり、ユーザーがまだローレンスのタスクを入力していないため、ローレンスには空白のタスクが必要ですが、selectステートメントに欠陥があるようです。すべてのユーザーにテーブルに印刷します。だから私の質問は、この種の問題をどのように解決するかです。

4

3 に答える 3

1
SELECT
    U.id,
    U.username,
    U.eID, 
    t.task_tom

FROM 
    users u

  INNER JOIN 
   (
      SELECT u_id, max(t_id) as t_id
      FROM tasks
      GROUP BY u_id
   ) tmax
  ON tmax.U_ID = u.id

  INNER JOIN tasks t ON t.t_id = tmax.t_id

WHERE u.id <> '5'

これは基本的に「各ユーザーの最新のタスクIDは何ですか、そのタスクに関するすべての情報を取得してください」と言っています。

于 2013-03-26T07:19:10.587 に答える
0

JOINLEFT JOINまたはRIGHT JOINを使用してテーブルをINNER JOIN要件に応じて。

    SELECT
        id,
        username,
        eID,
        T_ID,
        task_tom,
        U_ID
    FROM users
    LEFT JOIN tasks ON tasks.U_ID = users.id
    WHERE users.id <> '5'
    ORDER BY tasks.T_ID DESC
    GROUP BY users.id

答えを編集しましたが、

ORDER BY tasks.T_ID DESC
GROUP BY users.id
于 2013-03-26T07:03:45.227 に答える
0
$query="SELECT U.id,T.T_ID,task_tom FROM users U LEFT JOIN tasks T ON U.id = T.T_ID WHERE id <> '5' ORDER BY T.T_ID DESC group by U.id";
于 2013-03-26T07:18:58.300 に答える