2013-04-14 19 views
3

我有一個使用3個表的連接的SQL查詢。它實際上工作正常,但所有三個表都有一個名爲'id'的字段,所以稍後當我嘗試訪問id字段時,它只會訪問最後一個字段中的字段。 SQL查詢如下:SQL JOIN返回名稱爲'id'的3個字段

"SELECT * FROM professors AS p 
      JOIN schools_professors AS sp 
      ON p.school_id = sp.id 
      JOIN schools AS s ON sp.school_id = s.id WHERE p.first_name LIKE '%". 
       $search."%' OR p.last_name LIKE '%".$search. 
       "%' LIMIT 0, 10;" 

現在呢,學校,教授和學校_professors都有id列。我如何訪問教授的ID?這是我唯一關心的。

回答

5

在這種情況下,您不應該使用*,而是手動投影列名稱並在其上添加ALIAS。例如,

SELECT ...., 
     p.ID AS ProfessorID, 
     s.ID AS SchoolID, 
FROM  ..... 

作爲旁註,查詢是用SQL Injection脆弱,如果變量的值(小號)從外部來了。請看下面的文章,瞭解如何防止它。通過使用PreparedStatements你可以擺脫使用單引號圍繞值。

+0

它beign包裹在PDO和這樣的,以防止注射,我希望*是因爲我基本上是希望所有,但第二和第三臺的ID的,即約50 colums的原因。必須輸入所有這些信息才能擺脫兩列是一件痛苦的事情。 – samuraiseoul

+1

如果你仍然想使用'*',那麼爲'Professor和SchoolID'添加額外的列:'SELECT *,p.ID作爲ProfessorID,s.ID作爲SchoolID FROM ...' –

+1

這很好用!太感謝了! – samuraiseoul