MySQL: как хранить / извлекать информацию об исполнителе? - PullRequest
0 голосов
/ 01 октября 2009

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

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

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

Ответы [ 3 ]

2 голосов
/ 01 октября 2009

Попробуйте что-то в этом роде

tblSongs
   SongId
   Title
   YearProduced
   etc.

tblArtist
   ArtistId
   Name
   ProfilePage
   etc..

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  (*)

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

1 голос
/ 01 октября 2009

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

Song<br/> 
Name  SongID

Artist <br/>
Name  ArtistID

ArtistsInSongs <br/>
ArtistID SongID

Я дам вам разобраться с остальными.

0 голосов
/ 03 октября 2009
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);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...