2012-11-03 76 views
1

我試圖做的是建立一個從數據庫調用(奇努克數據庫特別 - http://chinookdatabase.codeplex.com/)查詢現在加入/顯示多個表具有相同的列名

,以顯示查詢輸出正確,我需要連接多個表 - 每個表共享相似的列名。在Chinook數據庫中,有多個表格(藝術家,專輯,流派,媒體類型,曲目等)。比方說,我想還可以顯示一個藝術家的名字的內容:

public function fetchArtistName(){ 
    return $row['Name']; 
} 

這是非常模糊的,因爲此行會去尋找媒體類型或專輯名稱名稱字段找到藝術家的名字之前。

我的SQL語句如下:

SELECT * 
FROM track AS t 
LEFT JOIN album al 
ON t.AlbumId = al.AlbumId 
LEFT JOIN artist ar ON al.ArtistId = ar.ArtistId 
LEFT JOIN mediatype m ON t.MediaTypeId = m.MediaTypeId 
LIMIT 0,15; 

有沒有一種方法,我可以去改變被輸出到像 表| t.Name | al.Name | ar.Name | m.name |

這樣我就可以基本上把這些多與

public function fetchArtistName(){ 
    return $row['ar.Name']; 
} 

它已經這麼長時間,因爲我已經打了SQL,我真的卡住容易。任何幫助將不勝感激,我已谷歌搜索和搜索已經在這裏。

謝謝。

+0

呃......不會'選擇T * A *。 ar。*,m。*'在這裏工作?而且,順便說一句,你真的需要獲取所有的領域? – raina77ow

+0

是的。停止懶惰並使用'SELECT *',並提供特定的列名和別名:'SELECT t.name as TrackName,a.name AS AlbumName,...',然後你可以使用'return $ row ['AlbumName 「];'。 :-) –

回答

2

我不確定您是否可以使用SELECT *...來做到這一點。你需要做這樣的事情:

SELECT t.Name as track_name, 
    al.Name as album_name, ar.Name as artist_name, m.Name as media_name 
FROM track AS t 
LEFT JOIN album al 
ON t.AlbumId = al.AlbumId 
LEFT JOIN artist ar ON al.ArtistId = ar.ArtistId 
LEFT JOIN mediatype m ON t.MediaTypeId = m.MediaTypeId 
LIMIT 0,15; 

...這樣你的PHP函數定義爲

public function fetchArtistName(){ 
    return $row['artist_name']; 
} 
相關問題