Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从Mysql获取逗号分隔字符串_Php_Mysql_Arrays_String - Fatal编程技术网

Php 从Mysql获取逗号分隔字符串

Php 从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时轻松地将

我正在像这样将一个字符串从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中的内容与$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的答案,您可以使用正则表达式代替LIKE

SELECT *
FROM table
WHERE ustaffid='$ustaffid'
AND groupid RLIKE '(^|, )$a(, |$)'
注意:您可能需要使用\来转义最后一个$


注2:这不是最佳解决方案。对于ID ID为主键的每个ID,您应该有一个单独的行。

是否考虑重新构造数据库模式以符合您的需要?在我看来,你需要1:许多关系。事实上,正如许多人所说,这突出了你的设计中的一个缺陷。利用关系数据库的固有属性并使用多个表。您只会在选择、更新、联接等方面遇到困难。它们都会变得过于复杂。如果$a的值是列表的最后一个元素,即末尾没有尾随逗号,该怎么办?它不会找到它。这就是为什么如果使用分隔符搜索,每个元素后面都必须有一个分隔符。。。这不是一个最优的解决方案,但如果你赶时间。。。