2016-03-05 19 views
0

我有兩個表的外鍵引用的列名:類別和測驗我如何在PHP

I類有:CATEGORY_ID | category_name |

測驗我有:quiz_id | quiz_name | quiz_category_id | quiz_duration

您可以注意到,quiz_category_id是一個FOREIGN KEY引用。

這是我的代碼至今:

<table> 
    <thread> 
     <tr> 
     <th>quiz name</th> 
     <th>quiz category</th> 
     <th>quiz duration</th> 
    </tr> 
    </thread> 
    <tbody> 
     <?php foreach (get_all_exam() as $r) { ?> 
     <tr> 
      <td><?php echo $r['quiz_name'] ?></td> 
      <td><?php echo $r['quiz_category_id'] ?></td> // I am getting the id value not the name 
      <td><?php echo $r['quiz_duration'] ?></td> 
     </tr> 
     <?php } ?> 
    </tbody> 
</table> 

get_all_exam()是一個功能,那就是:這是我做的SQL查詢

function get_all_exam() { 
    $data = array(); 

    $result = mysql_query("SELECT * FROM `quiz`"); 

    while ($row = mysql_fetch_assoc($result)) { 
     $data [] = $row; 
    } 

    return $data; 
} 

所以在一分鐘,它只是打印出來,

| 測驗名稱 | | 測驗類別 | | 測驗時長 |

|練習前| | 23 | | 5分鐘|

而不是它說23我想它,使它看起來了在相應的表來獲取名稱

感謝

回答

1
SELECT quiz.quiz_name, category.catagory_name, quiz.quiz_duration 
FROM quiz LEFT JOIN category 
ON (quiz.quiz_category_id = category=category_id) 

裏面的SELECT語句中,選擇你想要什麼,你也可以說SELECT quiz.*, category.*,但要小心如果你有相同的字段名稱,你可能想用AS檢索一些。

LEFT JOIN表示 - 即使右表中沒有值,也總是從左表中顯示;因此,即使沒有相應的category_id,它也會顯示quiz_id。 RIGHT JOIN會做相反的事情。

+0

另一個替代方案是'INNER JOIN'代替'LEFT JOIN'只是補充答案 –

+0

功能get_all_exam(){ \t \t $數據=陣列(); \t \t $結果= mysql_query( 「SELECT * FROM 'mock_exam_quiz' LEFT JOIN'mock_exam_category' ON( 'mock_exam_quiz.quiz_category_id'= 'mock_exam_category = CATEGORY_ID')」); while($ row = mysql_fetch_assoc($ result)){ \t \t $ data [] = $ row; \t \t} \t \t return $ data; } –

+0

所以我改變了我的功能,我仍然得到相同的結果,我錯過了什麼 –