选择在表中使用连接表和数组
Posted
技术标签:
【中文标题】选择在表中使用连接表和数组【英文标题】:Select using join tables and array in a table 【发布时间】:2015-11-15 10:10:28 【问题描述】:您好,我有 2 张桌子
|id|musicname|url|image|type
还有第二张桌子
|id|user|songslist|
songsids 里面有一个这样的数组 1、3、5、6、8等...
我的目标是从 table1 中选择 * 并将 table1 作为数组回显,而不是表两个数组,即 table1 的实际行。
所以基本上要取出歌曲列表中包含id的每一行,并将它们全部放入一个php数组中。
我学到了很多关于 PHP 数组的知识,但是我对 mysql 不太擅长,知道我该怎么做吗?
编辑
$selectmusiclist = mysql_query("SELECT * FROM music");
$songslist = array();
while ($songs = mysql_fetch_assoc($selectmusiclist))
$songslist[] = $songs;
然后选择表2:
$username="user1";
$selectuser = mysql_query("SELECT * FROM usersmusic where user=$username");
$user = mysql_fetch_assoc($selectuser);
$songslist = $user['songslist'];
现在我需要告诉数组 $songslist[] 只输出 id 为 $songslist 的歌曲包含 ids
【问题讨论】:
您选择和输出的当前代码是什么?$selectmusiclist = mysql_query("SELECT * FROM music"); $songslist = array(); while ($songs = mysql_fetch_assoc($selectmusiclist))$songslist[] = $songs;
当然只输出表 1 但我需要它与表 2 交互我也使用 foreach
单独输出它
请用代码更新您的问题,以便于阅读。您是在问如何在一个查询中从两个表中获取所有数据,还是仅获取 id?
@chris85 我已经编辑了问题,希望对您有所帮助!
所以,为了清楚起见,usersmusic 表的歌曲列表列包含一个逗号分隔的歌曲 ID 字符串,对应于音乐表中的 ID?
【参考方案1】:
我认为运行这样的连接会给你想要的结果。
SELECT * FROM usersmusic as um
join music as m
on um.songslist = m.id
where user = '$username'
如果$username
不是静态值,请确保将其转义;以后不想注入 SQL。
另请注意,mysql_
驱动程序现已弃用,您应该考虑更新到 mysqli
或 PDO
。
【讨论】:
谢谢你,我希望这有效,我现在要测试它,谢谢! 是的,您是对的,我确实出于兴奋而立即接受了,是的,您的答案中需要使用“和”,但这正是我一直在寻找的!它确实选择了我需要的方式,但它只选择 1 行,通常是歌曲列表的第 1 行,如果我也能弄清楚,那就太好了! 等一下,songslist
是一个逗号分隔的列表……这行得通吗?
我使用了while循环!我什至直接在 phpmyadmin 中使用了这个命令SELECT * FROM usersmusic as um join music as m on um.songslist = m.id where user = 'user1'
您也可以尝试这个答案来规范化数据,***.com/questions/8648115/…。以上是关于选择在表中使用连接表和数组的主要内容,如果未能解决你的问题,请参考以下文章
SQL - 从一个表中选择,同时在另外两个表之间进行内部连接(多对多表和另一个表)
MariaDB/MySQL 选择查询将 ids 的 json 数组替换为连接值