MySQL:如何存储/检索艺术家信息?

时间:2009-10-01 15:32:02

标签: php sql mysql

这很令人困惑;似乎我需要至少有一对多关系。

  1. 2位艺术家可能会演唱曲目 - 如何将其存储在数据库中?
  2. 在显示该曲目时,我希望链接到每位艺术家,以便当用户点击该曲目时,它会打开该艺术家的个人资料页面。
  3. 任何人都可以在设计一个或多个课程时为我提供一些帮助吗?

3 个答案:

答案 0 :(得分:2)

尝试类似的东西

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

(*)order by子句是指搜索条件产生多首歌曲,以及是否希望按顺序保留给定歌曲的艺术家。
这样的查询为具有多个艺术家的歌曲生成多行,每个艺术家一行,来自tblSongs的列的值被重复。

答案 1 :(得分:1)

任何多对多关系都需要三个表。以你的例子:

Song<br/> 
Name  SongID

Artist <br/>
Name  ArtistID

ArtistsInSongs <br/>
ArtistID SongID

我会让你弄明白其余的。

答案 2 :(得分:0)

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);
    }