2017-10-10 19 views
0

songs_albums.cat = songs_singers.id我如何能做到內部聯接與MySQL

CAT = ID

我可怎麼辦JOIN來獲取所有專輯的歌手?

$qr=mysql_query(" 
select songs_albums.* 
    , songs_singers.name as singer_name 
    , songs_singers.id singer_id 
    , songs_singers.page_name singer_page_name 
    , songs_singers.img singer_img 
    from songs_albums 
    , songs_singers 
where songs_singers.active=1 
    and songs_albums.cat=songs_singers.id 
limit 8 
") ; 
+1

到底是什麼問題?你有錯誤嗎?錯誤的結果? – Mureinik

+0

請停止使用PHP的不安全和不推薦使用的mysql_ API – Strawberry

+0

您的數據庫結構似乎不適合支持歌手在多個專輯和擁有多個歌手的專輯。按照你的設計,它似乎支持擁有一位歌手的專輯。因爲歌手ID在貓場中的專輯上。只有2個表格不支持M:M關係。 1:M可能不是M:M – xQbert

回答

1

如果我們假設song_singers.Id與song_albums.cat相同,那麼您已經是。您只是使用ANSI 89標準而不是ANSI 92標準。

一些提示:

  1. 限制W/O命令由通常不會使有很大的意義。假設我在表格中記錄了1-10。我限制在8.我可以得到這些8的任何組合。它可能並不總是相同的8,它可能並不總是以相同的順序。
  2. 使用表別名使閱讀/打字更容易。
  3. 避免在select中使用*而不是拼出字段以獲取所需內容。檢索比需要更多的數據會增加網絡流量,減慢查詢檢索工作並增加呼叫服務器的開銷。 *通常在故障排除/調試或開始瞭解數據/結構時可以接受;但在代碼生產中通常並不明智。

ANSI-89標準:使用內

SELECT SA.* 
    , ss.name as singer_name 
    , ss.id as singer_id 
    , ss.page_name as singer_page_name 
    , ss.img as singer_img 
FROM songs_albums SA 
    , songs_singers SS 
WHERE ss.active=1 
    and sa.cat=ss.id 
ORDER BY sa.ID, SS.ID 
LIMIT 8 

ANSI-92標準加入。

SELECT SA.* 
    , ss.name as singer_name 
    , ss.id as singer_id 
    , ss.page_name as singer_page_name 
    , ss.img as singer_img 
FROM songs_albums SA 
INNER JOIN song_singers SS 
    on sa.cat=ss.id 
WHERE ss.active=1 
ORDER BY sa.ID, SS.ID 
LIMIT 8 
+0

其工作,非常感謝:D –

0

您可以指定相冊ID特定singer.so現在把所有專輯的所有歌手左連接查詢就是這樣

$sql = "select sa.*,s.id,s.name as singer_name from song_singers as s left join songs_album as sa ON sa.id=s.album_id where s.active=1";