2013-03-26 55 views
0

我在我的數據庫中的兩個表選擇合適的數據爲用戶

enter image description here

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。
這個代碼將提供給我這個答案

enter image description here

據稱,SSIS(數據挖掘)僅僅是分配給巴希爾和勞倫斯應該有一個空白的任務,因爲用戶didnt輸入勞倫斯任何任務,只是還沒有在task_tom但似乎我對我的選擇語句有缺陷,或者它是我的每個用戶將它打印在桌面上的每個用戶。所以我的問題是如何解決這種問題?

+0

不要使用兩個查詢..而是加入他們與用戶ID – 2013-03-26 07:03:42

+0

請你可以請進一步向我解釋我的好先生 – Yinks 2013-03-26 07:05:05

+0

好吧看到你的任務每個任務有其各自的用戶ID。你可以連接你的任務表u_id到用戶表ID來產生只有1個結果,這是你輸出的樣子看起來像 – 2013-03-26 07:06:52

回答

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,現在讓我關於該任務的所有信息「。

+0

「字段列表」中的未知列'id' – Yinks 2013-03-26 07:40:51

+0

@Yinks抱歉,輸入時看不到您的表格。現在就試試。 – Sepster 2013-03-26 07:43:47

+0

這個工作,但它不會顯示任何其他成員,除非他們有一個任務分配給他們。即使沒有分配任務,是否有任何方法可以抓取他們的名字? – Yinks 2013-03-26 07:46:39

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 
+0

你能告訴我如何做這種提前類型的語句 – Yinks 2013-03-26 07:06:40

+0

執行此查詢相同的方式,你在做什麼之前,這會給你加入表結果。 – 2013-03-26 07:08:33

+0

好的謝謝你,但現在我怎麼可以有每個用戶1的限制? – Yinks 2013-03-26 07:09:36

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";