Intereting Posts

MySQL: как сохранить / получить информацию о художнике?

Это очень запутанно; похоже, мне нужно иметь по крайней мере одно отношение «многие ко многим».

  1. Трек может быть исполнен 2+ художником – как я могу сохранить это в базе данных?
  2. Показывая этот трек, я хочу ссылку на каждого исполнителя, чтобы при щелчке по треку пользователи открыли страницу профиля этого исполнителя.

Может ли кто-нибудь помочь мне в разработке класса или классов для этого?

Попробуйте что-нибудь подобное

 tblSongs
    SongId
    заглавие
    YearProduced
    и т.п.

 tblArtist
    ArtistId
    имя
    Страница профиля
    и т.д..

 tblSongArtists
     SongId
     ArtistId

Тогда ваши запросы могут выглядеть примерно так:

SELECT Title, YearProduced, Name, ProfilePage FROM tblSongs S LEFT OUTER JOIN tblSongArtists SA ON SA.SongId = S.SongId LEFT OUTER JOIN tblArtists A ON A.ArtistId = SA.ArtistId WHERE Title = 'I got the blues' -- .... ORDER BY SongId -- or Song Title (*) 

(*) order by, если критерии поиска производят более одной песни, и если вы хотите последовательно удерживать художников за данную песню.
Такой запрос создает несколько строк для песни с несколькими художниками, по одной строке для каждого исполнителя, значения столбцов от повторяющихся tblSongs.

Для любых отношений «многие ко многим» требуются три таблицы. Для вашего примера:

 Song<br/> Name SongID Artist <br/> Name ArtistID ArtistsInSongs <br/> ArtistID SongID 

Я дам вам понять остальное.

 public static function find_artist_on($track_id=0) { global $database; $sql = "SELECT * FROM " . self::$table_name ." s " ; $sql .= "LEFT OUTER JOIN trackartist TA ON TA.track_id =s.track_id"; $sql .= "LEFT OUTER JOIN artist A ON A.artist_id =TA.artist_id"; $sql .= " WHERE s.artist_id=" .$database->escape_value($track_id); $sql .= " ORDER BY artist_id ASC"; return self::find_by_sql($sql); }