SQL多表和LookUp表

时间:2010-11-25 15:49:41

标签: php sql

我已经尝试过寻找答案,但我仍然有点失落。

我有一个使用PHP / SQL存储音乐曲目详情的网站。 我想搜索/添加/编辑/删除tracktitle,album,composer,bpm,timesignature,duration,instrumentation,genre,keywords(description)。 到目前为止,我已经完成了一个只有三个表和一个查找表(轨道,作曲家,专辑)的测试版本,它似乎可以正常搜索。

表'track'(id,tracktitle) table'composer'(id,composername) 表'专辑'(id,albumtitle) 表'albumtrack(track.id,composer.id,album.id)

然而,在添加新曲目并为其指定作曲家和专辑时,我似乎无法正确获取插入位。 tracktitle可以进入轨道表,但如何在albumtrack查找表中链接它。

我需要一些额外的位吗?

  $sql = "INSERT INTO track SET
  track.tracktitle='$tracktitle' ";

另外......我是否以正确的方式使用每个位表(bpm表,持续时间表,流派表)?

一个曲目可能有多个持续时间(不同的编辑),bpms,时间签名,因此将共享大量数据。 我还希望用户能够搜索一系列持续时间或bpm,例如2到3分钟之间的曲目。

在扩展我的测试版本之前,我需要一些建议,看看我是否这样做是最好的方法。

由于

2 个答案:

答案 0 :(得分:0)

假设“id”字段是自动递增值(数据库正在为您生成它们),那么在插入轨道后,您必须恢复刚刚添加的行的ID(使用mysql_insert_id())。然后,您可以使用该ID以及专辑和作曲家ID来INSERT到专辑轨道。

此外,您应该知道您使用的INSERT语法是特定于MySQL的。如果你从不考虑切换数据库,这很好,但你也可能想要学习“标准”INSERT语法(INSERT INTO tablename (col1, col2. . .) VALUES (val1, val2. . .))。

答案 1 :(得分:0)

您的INSERT查询应该是:

  $sql = "INSERT INTO track VALUES('','$tracktitle','$duration','$etc')";

自动递增ID的第一个值为空。

“另外......我是否以正确的方式使用每个位表(bpm表,持续时间表,流派表)?”

你能不能只有一个包含多个字段的表(bbm,持续时间等)。

希望这有帮助。