这很混乱;似乎我需要至少有一个多对多的关系。MySQL:如何存储/检索艺术家信息?
- 一个曲目可能会被2+艺术家唱出 - 我如何将它存储在数据库中?
- 显示该曲目时,我想链接到每位艺术家,以便当用户点击曲目时,会打开该艺术家的个人档案页面。
任何人都可以提供一些帮助来设计一个或多个类来完成这个任务吗?
这很混乱;似乎我需要至少有一个多对多的关系。MySQL:如何存储/检索艺术家信息?
任何人都可以提供一些帮助来设计一个或多个类来完成这个任务吗?
尝试类似的东西
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中列的值。
我也在我的专辑表中添加artist_id ... n也在轨道表中..我错了吗? – sunidhi 2009-10-01 16:40:42
我认为专辑表中没有使用artist_id ......它变得混乱。 – sunidhi 2009-10-01 16:42:52
@sunidhi添加(或不添加)artist_id到专辑表...这是要避免的,因为我假设有可能让_serveral_艺术家与给定专辑关联。然后,您将需要一个tblAlbumArtists表(类似于tblSongArtists),或者间接地选择某个'专辑'的艺术家列表:tblAlbums - > tblbSongs - > thlSongArtists - > tblArtists在这样的查询中,您会需要使用DISTINCT,因此您只能将每位艺术家列出一次,即使他/她可能与该专辑的几首歌有关。 – mjv 2009-10-01 17:37:36
任何多对多的关系都需要三张表。对于你的例子:
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);
}
你试过了什么? – SilentGhost 2009-10-01 15:36:02
这种作业的气味。作为两个答案的状态多对多的关系。 – 2009-10-01 15:43:52