0

我的数据库中有两个表

在此处输入图像描述

表任务的 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,而lawrence应该有一个空白任务,因为用户还没有为lawrence输入任何任务,但似乎我的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

JOIN您的表使用LEFT JOINRIGHT JOININNER 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 回答