Php 从Mysql获取逗号分隔字符串
我正在像这样将一个字符串从PHP保存到MySQLPhp 从Mysql获取逗号分隔字符串,php,mysql,arrays,string,Php,Mysql,Arrays,String,我正在像这样将一个字符串从PHP保存到MySQL $groupid = "13, 14, 15, 16" $write = mysql_query("INSERT INTO table VALUES ('','$groupid')"); 如果$a=15,我将尝试从表中提取数据 $extract = mysql_query("SELECT * FROM table WHERE ustaffid='$ustaffid' AND groupid='$a'"); 如何在提取$groupid时轻松地将
$groupid = "13, 14, 15, 16"
$write = mysql_query("INSERT INTO table VALUES ('','$groupid')");
如果$a=15,我将尝试从表中提取数据
$extract = mysql_query("SELECT * FROM table WHERE ustaffid='$ustaffid' AND groupid='$a'");
如何在提取$groupid时轻松地将$groupid中的内容与$a进行匹配?我可以用MySQL做这个吗?你可以在这里使用这个函数
SELECT *
FROM table
WHERE ustaffid='$ustaffid'
AND FIND_IN_SET('$a', groupid) > 0
如果$a只包含一个id,我建议将其分为多个记录,因为字符串搜索/选择速度较慢
SELECT *
FROM table
WHERE ustaffid='$ustaffid'
AND groupid LIKE '%$a,%'
但是您必须在字符串的末尾加一个逗号。我不知道groupid列中有空格是否会影响find_in_set MySQL函数,而且@PeeHaa notes在字符串中搜索速度较慢,很难使用索引进行优化
您确实应该考虑修改数据库模式并将其规范化,以代替在列中保存多个值,使用依赖表并将多行关联到每个GABIPID值的主表。这就是关系数据库的用途。
扩展@ecchymose的答案,您可以使用正则表达式代替LIKESELECT *
FROM table
WHERE ustaffid='$ustaffid'
AND groupid RLIKE '(^|, )$a(, |$)'
注意:您可能需要使用\来转义最后一个$
注2:这不是最佳解决方案。对于ID ID为主键的每个ID,您应该有一个单独的行。是否考虑重新构造数据库模式以符合您的需要?在我看来,你需要1:许多关系。事实上,正如许多人所说,这突出了你的设计中的一个缺陷。利用关系数据库的固有属性并使用多个表。您只会在选择、更新、联接等方面遇到困难。它们都会变得过于复杂。如果$a的值是列表的最后一个元素,即末尾没有尾随逗号,该怎么办?它不会找到它。这就是为什么如果使用分隔符搜索,每个元素后面都必须有一个分隔符。。。这不是一个最优的解决方案,但如果你赶时间。。。