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

时间:2011-06-02 15:01:24

标签: 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中的内容与$ a匹配,同时提取它?我可以用MySQL做到吗?

5 个答案:

答案 0 :(得分:2)

您可以在此处使用find_in_set功能。

SELECT * 
    FROM table 
    WHERE ustaffid='$ustaffid' 
        AND FIND_IN_SET('$a', groupid) > 0

答案 1 :(得分:2)

如果$a只包含一个ID,我建议将其分成多个记录,因为在字符串搜索(/ select)中较慢。

答案 2 :(得分:2)

我不知道groupid列中是否有空格会影响find_in_set MySQL函数,而@PeeHaa注意在字符串内搜索速度较慢,很难用索引进行优化。 / p>

您应该考虑修改数据库模式并对其进行规范化,以便不使用在列中保存多个值,而是使用从属表并将多个行与每个groupid值的主表相关联。这就是关系数据库的用途。

答案 3 :(得分:1)

扩展@ ecchymose的答案,你可以使用正则表达式而不是LIKE。

SELECT *
FROM table
WHERE ustaffid='$ustaffid'
AND groupid RLIKE '(^|, )$a(, |$)'

注意:您可能需要使用$转义最后\

注2:这不是最佳解决方案。每个ID都应该有一个单独的行(ID为PRIMARY键)。

答案 4 :(得分:0)

SELECT * 
FROM table 
WHERE ustaffid='$ustaffid' 
AND groupid LIKE '%$a,%'

但是你必须在结尾处用逗号结束你的字符串。