2013-03-20 118 views
0

我有一臺這樣的:MySQL的 - 一對多查詢

[Exam] 
[exam_id] [exam_name] 
    1  Test1 
    2  Test2 

與其他表是這樣的:

[Module] 
[module_id] [module_name] [exam_id] 
    1   Module1  1 
    2   Module2  1 
    3   Module1  2 

顯然,我們看到的Test1是如何分配的2個模塊和TEST2對模塊分配

我希望得到一個查詢連接兩個表,其中輸出是這樣的:

Test 1 Module1 
      Module2 

Test 2 Module1 

我做了以下內容:

SELECT `exam`.'exam_id', 'exam_name', 'module_name' 
FROM (`exam`) JOIN `module` ON `exam`.`exam_id`=`module`.`exam_id` 

但我得到了與重複的考試名稱的輸出:

Test 1 Module 1 
Test 1 Module 1 

Test 2 Module1 

我想刪除多餘的測試1,因爲這些被在視圖上顯示我'm使用foreach

你們能幫我解決嗎? ..我使用codeIgniter,所以你也可以在codeigniter中提供我的查詢。

謝謝

+0

是的......不會發生,對不起。那不是SQL的工作原理。你可能會把一些瘋狂的UNION放在一起,除了'標題行'之外的任何東西都會塗掉考試名稱,但老實說,這些報告/顯示任務在查詢後處理得更好。 – Perception 2013-03-20 22:38:12

回答

0

MySQL將在每一行返回exam_name。爲了防止它在你的視圖中顯示,你需要設置一些額外的邏輯PHP端來做到這一點。例如

$exam = null; 

foreach($rows as $row){ 

    if($row['exam'] !== $exam){ 
     echo '<h1>'. $row['exam'] .'</h1>'; 
     $exam = $row['exam']; 
    } 

    echo '<p>'. $row['module'] .'</p>'; 

} 

這隻打印考試,如果它不同於上一行。