我正在将这样的字符串从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做到吗?
答案 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,%'
但是你必须在结尾处用逗号结束你的字符串。