选择在表中使用连接表和数组

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_ 驱动程序现已弃用,您应该考虑更新到 mysqliPDO

【讨论】:

谢谢你,我希望这有效,我现在要测试它,谢谢! 是的,您是对的,我确实出于兴奋而立即接受了,是的,您的答案中需要使用“和”,但这正是我一直在寻找的!它确实选择了我需要的方式,但它只选择 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/…。

以上是关于选择在表中使用连接表和数组的主要内容,如果未能解决你的问题,请参考以下文章

MySQL选择其他表中没有匹配列的行

SQL - 从一个表中选择,同时在另外两个表之间进行内部连接(多对多表和另一个表)

MariaDB/MySQL 选择查询将 ids 的 json 数组替换为连接值

根据另一个表的值选择表和字段

Spring Data JPA 查询从一个连接表中选择所有值

使用语句在表中插入java字节数组