2011-05-26 37 views
0

我正在使用以下語句來填充Excel電子表格中的學生信息,其中包括「actualstudenthours」。SQL命令邏輯遇到問題 - 請幫助

問題是,我想向所有學生展示tblstudentstatus.id = 3,但我還需要顯示這些學生的實際學生時間。不幸的是,並不是所有的學生都在「視覺學習時間」中有相應的條目。這種說法完全排除了那些沒有相應的「觀看時間」的學生。

我該如何讓所有學生出現在tblstudentstatus.id = 3的位置?

如果在實際的時間裏沒有他們的入口,它不應該完全忽略學生......學生時間字段應該是空白的。你的幫助將不勝感激。

$result=mysqli_query($dbc,"SELECT tblstudent.first, tblstudent.last, 
      LEFT(viewactualstudenthours.ACTUAL_remain,5), 
      (SELECT first from tbladdress where tbladdress.id = tblstudent.contact2), 
      (SELECT last from tbladdress where tbladdress.id = tblstudent.contact2), 
      tbladdress.address1,tbladdress.city,tbladdress.state,tbladdress.zip1, 
      tbladdress.phone, tbladdress.cell, tbladdress.email 
      FROM tblstudent, tbladdress, tblstudentstatus, viewactualstudenthours 
      WHERE viewactualstudenthours.student_id = tblstudent.id 
       AND tblstudent.status = tblstudentstatus.id 
       AND tbladdress.id = tblstudent.contact1 
       AND tblstudentstatus.id = 3"); 

:在編輯器中進行SQL半清晰的 - 但可能打破在PHP代碼書中的每個規則。)

+0

通過縮進他們四個空格注意:您可以[格式線爲代碼(http://meta.stackexchange.com/questions/22186/how-do-i-format-my-code-blocks)。編輯器工具欄中的「{}」按鈕可以爲您做到這一點。編輯你的問題並嘗試一下。單擊編輯器工具欄中的橙色問號以獲取更多信息和格式化提示。 – outis 2011-05-26 04:43:41

+1

@junkyjunk:不,我不是。我的建議是「junkyjunk」,你今天註冊的事實,您的用戶名,可能會讓人覺得你是曳。爲了您參考:http://msmvps.com/blogs/jon_skeet/archive/2010/08/29/writing-the-perfect-question.aspx – 2011-05-26 04:50:10

+0

我書籤此網址 – Ibu 2011-05-26 04:57:47

回答

1

學會使用SQL-92,而不是引進顯式連接符號FROM子句中舊的逗號分隔的表名列表。

您需要使用表tblstudent的LEFT OUTER JOIN以及viewactualstudenthours的視圖。忽略引號等,以使PHP代碼工作需要,你需要:

SELECT S.first, S.last, 
     H.ACTUAL_remain, 
     A2.first, A2.last, 
     A1.address1, A1.city, A1.state, A1.zip1, 
     A1.phone, A1.cell, A1.email 
    FROM tblstudent     AS S 
    JOIN tbladdress     AS A1 ON S.Contact1 = A1.ID 
    JOIN tbladdress     AS A2 ON S.Contact2 = A2.ID 
    JOIN tblstudentstatus   AS T ON S.Status = T.ID 
    LEFT JOIN viewactualstudenthours AS H ON S.ID  = H.Student_ID 
WHERE T.id = 3 

也學會使用表別名(AS的條款) - 它簡化並闡明瞭SQL。如果模式取決於你,不要在'tbl'前添加表名,而在'view'中添加視圖名 - 它非常混亂。

請注意,我擺脫了選擇列表中的子選擇通過兩次加入地址表,兩個獨立的別名。我刪除了函數LEFT();如果需要,可以重新引入它。

+0

這似乎完美地工作。如果有任何問題,我會在明天再報告。我只想說謝謝。如果像你這樣的人不存在,我什麼都不知道。見此轉化這樣的具體實際的例子是這麼多有用和有效的比讀書對我教科書和其他人的例子。我想我明白了AS子句,我開始瞭解JOIN和LEFT JOIN爲好。再次感謝你的幫助。 – junkyjunk 2011-05-26 05:46:30