2012-06-06 69 views
4

我有一個while循環輸出一個類的列表。在班級數據庫中,教師姓名由用戶數據庫中的教師ID確定。我怎樣才能避免在PHP的While循環中使用MySQL查詢

這是我的數據庫結構。

Classes Database 
----------------------------- 
ID  CLASS    TEACHER 
1  product design  3 

User Database 
----------------------------- 
ID  NAME 
3  John Doe 

因此,當列出我的類時,我需要它將「3」轉換爲「John Doe」。

這是我當前的代碼:

<?php 
    $classdetails = mysql_query("SELECT * FROM class"); 
    while($class = mysql_fetch_array($classdetails)) { 
    $marklist_class = $class['class']; 
    $marklist_teacher = $class['teacher']; //This is a userid         

    //------Somewhere here i need to get the userid and look it up in the user database 
    if($marklist_class=="") { 

    } else { 
     echo $marklist_class . ' ' . $marklist_teacher;} 
    } 
    } 
?> 

我明白只是把另一個MySQL查詢將會有更低的性能,是不明智的,那麼我將如何查找用戶數據庫的每一行不添加查詢到while循環。

謝謝。

+0

這聽起來像你需要用你的初始查詢來獲取更多信息,除非它是分層數據;那麼我會說在開始時做2個查詢,把它們扔到數組中,並在你的循環中引用它們。 –

回答

5

您可以使用連接查詢一次獲取所有需要的信息。然後在你的應用程序中,你可以對它進行排序並相應顯示。 例如

SELECT Classes.class, Users.Name 
FROM Classes JOIN Users on Classes.Teacher = Users.ID 
+0

謝謝你的工作,這可能與三個或更多的表格表嗎? – joshkrz

+0

只要您以某種方式相互關聯,您可以根據需要連接儘可能多的表格,只需在之前添加一個新連接即可。請確保按順序拉取它們 - 您輸入的連接應與在初始查詢或以前連接中拉取的信息結合在一起。 –

+0

是的,我有它的工作,花了一段時間讓我的頭,謝謝大家的幫助。 – joshkrz

1

你想在mysql中使用JOIN

SELECT * FROM class c JOIN user u ON u.ID = c.TEACHER 
0

您可以在初始查詢中使用JOIN。

Select c.id, c.class, c.teacher, u.name from class c join user u on u.id = c.teacher 

這將返回所有從班列,加上匹配的老師的名字列從用戶,都在一個查詢。