Okej, więc mam tabele albums
, artists
oraz songs
.
albums: id
, AlbumTitle
, ArtistsId
, Year
.
artists: id
, ArtistName
.
songs: id
, Title
, ArtistId
, AlbumId
.
Najpierw miałem kod który wyświetla informacje o jednym albumie (w $TB_Albums
,TB_Artists
są nazwy tabel)
$id = 5; // np.
$querySelectAlbums = "SELECT
$TB_Albums.AlbumTitle, $TB_Albums.Year,
$TB_Artists.ArtistName
FROM $TB_Albums
INNER JOIN $TB_Artists
ON $TB_Albums.ArtistId = $TB_Artists.Id
WHERE $TB_Albums.Id = '$id';";
//..
$res = mysqli_query($link, $querySelectAlbums);
while ($mfa = mysqli_fetch_assoc($res)) {
wyswietlInfoOAlbumie($mfa);
}
I to działało.
Teraz do tego chciałem wyświetlić pod "info o albumie" wszystkie piosenki w albumie. Zrobiłem więc coś takiego:
$querySelectAlbum = "SELECT
$TB_Songs.Id, $TB_Songs.Title, $TB_Songs.Genre, $TB_Songs.Length,
$TB_Songs.ArtistId, $TB_Songs.AlbumId, $TB_Songs.YoutubeId,
$TB_Albums.AlbumTitle, $TB_Albums.Year, $TB_Albums.CoverPath,
$TB_Artists.ArtistName
FROM $TB_Songs
JOIN $TB_Albums
ON $TB_Albums.Id = $TB_Songs.AlbumId
JOIN $TB_Artists
ON $TB_Artists.Id = $TB_Songs.ArtistId
WHERE $TB_Songs.AlbumId = '$id'";
$showedInfo = false;
while ($mfa = mysqli_fetch_assoc($res)) { // spodziewam sie wielu rekordów, chce wyciągnąć 1 raz info o albumie z jednego,
if (!$showrdInfo) { // a potem po kolei wszystkie info o piosenkach
wyswietlInfoOAlbumie($mfa); // this should invoke once
$showInfo = true;
}
showOneSong($mfa); // this should invoke multiple times
}
I teraz ten drugi sposób też działa, ale tylko dla albumów w których są jakieś piosenki. Jeżeli w tabeli songs
nie ma żadnej piosenki która ma odpowiadający album (żadna nie spełnia warunku songs.AlbumId == albums.id
) to nie zwraca też żadnego rekordu z którego mógłbym wyciągnąć info o albumie. Jak to naprawić?
Nie mam pomysłu jak napisać to zapytanie tak żeby dostać zawsze: nazwę albumu
, nazwę wykonawcy albumu
(z tabel albums
i artists
) oraz jeżeli jakieś są nazwę piosenki
, rok piosenki
(z tabeli piosenki).
Informacje o piosence chcę wyświetlić w formie listy, a informacje o albumie raz w formie nagłówka (w załączniku o co mi chodzi).
Nie wiem też czy dobrze jest starać się to zrobić w jednym zapytaniu, czy może napisać jedno dla informacji o albumie a drugie dla listy piosenek?