MySQL LEFT JOIN Проблема с несколькими таблицами

У меня 3 стола: singers , songs , albums . Все они связаны с singer_id

Мне нужно получить все из них, даже если нет соответствующего singer_id . Мне удалось получить все из них с этим запросом:

  SELECT singers.singer_name, albums.album_name, songs.song_name FROM singers LEFT JOIN albums ON singers.singer_id = albums.singer_id LEFT JOIN songs ON albums.singer_id = songs.singer_id WHERE singer_id = ? 

Но проблема в том, что я могу; t правильно отображать результаты.

Скажем, у певицы 3 альбома и 11 песен. Вот как я их показываю …

Отображение имени певца:

 echo $results[0]['singer_name'] 

Отображение имен песен:

 foreach($results as $song) { // PROBLEM: instead of getting 11 songs i'm getting 33 results so each song show up 3 times. echo $song['song_name'] } 

Отображение альбомов:

 foreach($results as $album) { // PROBLEM: i'm getting 33 albums instead of 3 each album shows up 3 times. echo $album['album_name'] } 

EDIT: в таблице песен есть ссылка на таблицу альбомов album_id но есть песни без альбома, поэтому мне нужно получить результаты только с помощью singer_id

что мне нужно получить: 11 песен. 3 альбома. 1 певец.

заранее спасибо.

EDIT: это решение сработало для меня. я хотел бы получить все песни для указанного идентификатора исполнителя и альбомы, результаты, которые мне нужны, выглядят так.

 singer_name : song_name : album_name ............................................................... Jay Z : 99 Problems : NULL Jay Z : Gotta Have It : Watch the Throne 

поэтому я хотел получить все песни певца, даже если они еще не в альбоме.

это запрос, который я использовал.

 SELECT singers.singer_name, songs.song_name, albums.album_name FROM singers LEFT JOIN songs ON singers.singer_id = songs.singer_id LEFT JOIN albums ON albums.album_id = songs.album_id WHERE singers.singer_id = ? 

спасибо @knittl, я получаю результаты, которые мне нужны.

но есть и другая проблема. У меня 3 альбома и 11 песен

песни отображаются правильно, но когда я делаю петлю foreach на альбомах, я снова получаю 33 альбома ….

как я могу правильно отображать альбомы? У меня всего 3 альбома.

Related of "MySQL LEFT JOIN Проблема с несколькими таблицами"

вы хотите все песни. выберите из песен и выполните левое соединение, чтобы получить потенциальные данные из других таблиц (чтобы получить более приятное представление):

 SELECT a.artist_name, COALESCE(b.album_name, '(no album)'), s.song_name, FROM songs s LEFT JOIN artists a ON s.singer_id = a.singer_id LEFT JOIN albums b ON s.album_id = b.album_id AND s.singer_id = b.singer_id ORDER BY a.artist_name, b.album_id 

Главное, что вы хотите – это песни, песня должна иметь художника, но может иметь / не иметь альбом:

ТАК :

 SELECT singers.singer_name, IF('' == albums.album_name, 'single', albums.album_name) AS album_name, songs.song_name FROM songs AS songs RIGHT JOIN singers AS singers ON (singers.singer_id = songs.singer_id) LEFT JOIN albums AS albums ON (albums.singer_id = songs.singer_id) WHERE songs.singer_id = ?