我一直在尝试寻找这个问题的解决方案,但我不确定如何制定问题,而我找到的答案并不是我正在寻找的。 p>
我的数据库中有2个表:
name - artistid(a_i)
Abba - 1
songid - songid2(a_i) - songtext - songname - artistname
1 - 1 - This is the song text - mamma mia - abba
1 - 2 - This is the song text - song2 - abba
当我选择一位艺术家时,我可以从不同歌曲的列表中进行选择。问题是我想获得" songid2
"的歌曲/歌曲名称。
这就是它的外观
现在在这种情况下,文本将显示,因为songid2 = artistid
但如果我选择歌曲:songid2=2
,显然什么都不会出现。现在我的问题是,如何在php中正确查询?
EDIt:感谢OIbisidian,我设法获得了歌曲文本的正确数据,但现在我很难回应艺术家的歌曲..我不确定我做错了什么但是数据库中的所有歌曲都显示出来,并且它们不可点击,因为" songid2
"不会分配给他们。
$result = mysqli_query($con,"SELECT songname, songid2 * From bridge b, songs s, artists a WHERE s.songid2 = a.artistid");
while($row = mysqli_fetch_array($result)) {
echo "</br>";
echo "<div id='artistlista'>";
echo "<ul><li><a href='show.php?songid2=" . $row['songid2'] . "'>" . $row['songname'] . "</a></li></ul>";
echo "</div>";
}
答案 0 :(得分:0)
songid2 =来自这位特定艺术家的不同歌曲。
根本没有PHP的问题;问题听起来与您在表中存储数据的方式有关。你不应该有一个与一个变量相关的多个值!听起来你会分别从两张桌子中分别存储歌曲和艺术家,再加上 bridging table 。
桥接表(也称为关联实体)允许您有两个外键作为另一个表中的主键,解决了多对多关系的问题。
更合乎逻辑的方法是类似于以下的表:
表1 - 歌曲:
ID | Song Name
-------------------
1 | Hello
2 | Goodbye
表2 - 艺术家:
ID | Arist Name
---------------------
1 | ABBA
2 | ABC
Bridging Table(将歌曲与艺术家联系起来):
ID | Song ID | Artist ID
--------------------------------
1 | 2 | 1
2 | 1 | 2
3 | 2 | 2
在上面的示例中,ABBA
和ABC
都有一首名为Goodbye
的歌曲,但只有ABBA
有一首名为Hello
的歌曲。
这样,当您想要查询特定艺术家时,您可以选择歌曲名称和相关的艺术家名称,例如:
SELECT s.name, a.name
FROM songs s, bridge b, artists a
WHERE b.sid = s.id AND b.aid = a.id
希望这有帮助! :)