这很令人困惑;似乎我需要至少有一对多关系。
任何人都可以在设计一个或多个课程时为我提供一些帮助吗?
答案 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);
}