2012-08-15 77 views
0

這裏是我的PHP數據庫結構:http://pastebin.com/x89AdzfS顯示某些MySQL表

我一直在嘗試了幾個小時獲得使用PDO工作,但都失敗了JOIN SQL查詢,所以我在這裏需要一些幫助。

我需要顯示被分配到一個類ID,學生也報名參加了所有的「分配」(標題和描述)一個PDO查詢。

請告訴我,如果你需要我更加具體。謝謝!

編輯

這裏有一個查詢我做它顯示的類人是

$sql = $db->prepare("SELECT enrollments.*, courses.*, students.* FROM enrollments 
LEFT JOIN courses ON enrollments.course_id = courses.id 
LEFT JOIN students ON students.id = enrollments.student_id 
WHERE enrollments.student_id = ? 
"); 
$sql->execute(array($login_id)); 

while($row = $sql->fetch(PDO::FETCH_ASSOC)) 
    { 
    echo "<li><a href='class.php?id=".$row['course_id']."'><i class='icon-book'></i>".$row['name']."</a></li>"; 
} 
+0

嘿,亞歷克斯 - 我對PDO並不熟悉,所以我無法幫助你,但是一般來說,要求幫忙而不提供你的例子已經嘗試過了。你寫的東西不僅很可能已經接近工作,而且還證明你已經花時間處理這個問題。 – 2012-08-15 01:41:09

+0

我已經用我已經完成的查詢更新了它,顯示了用戶註冊的類,但無法讓它顯示每個課程的作業。 – 2012-08-15 01:49:23

+0

YAY!不使用'mysql_'且聲譽較低的人! – 2012-08-15 04:04:13

回答

2

下面是一個相對簡單的連接來完成我認爲你是後。與查詢

$sql = $db->prepare("SELECT 
    title, 
    description, 
    courses.name 
FROM assignments 
JOIN courses ON courses.id = assignments.course_id 
JOIN enrollments USING(course_id) 
WHERE enrollments.student_id = ?"); 

$sql->execute(array($login_id)); 

我的思維過程是這樣的:

  1. 決定哪個是「主」表。你說「顯示所有的作業」,所以它是「作業」
  2. 該表格是FROM後的第一個表格
  3. 瞭解到我有某個學生,找到「student_id」的最短路徑,這對域邏輯有意義
  4. 我看到「招生」有一個student_id,而我的作業招生有一個course_id;所以這是我對student_id數據
  5. JOIN對涉及其中的因素入學率是()

從查詢的不同關係的任務(其中SQL使得容易當列是相同的名稱與使用(我路徑看到它),就是使用你的絕對目標實體作爲原始的FROM表,然後從那裏加入,如果你想分配,查詢應該從FROM assignments開始,然後使用連接來提取你需要用來限制結果

+0

這是一種魅力。感謝思考過程;它已經爲我清除了一些東西。 – 2012-08-15 02:00:04

+0

你真的知道如何看看它來自哪個課程嗎?我想要顯示Class:Assign。標題 – 2012-08-15 02:21:35

+0

當然...只需加入一個加入課程。這是JOIN替代語法的一個體面的例子(ON而不是USING) – 2012-08-15 04:01:51