Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.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选择查询中匹配delimeter(|)分隔值字段_Php_Mysql_Database_Sql Like - Fatal编程技术网

Php mysql选择查询中匹配delimeter(|)分隔值字段

Php mysql选择查询中匹配delimeter(|)分隔值字段,php,mysql,database,sql-like,Php,Mysql,Database,Sql Like,在我的mysql表中,其中一个字段存储了(1 | 2 | 3)这样的值 id Skills ---- -------- 1 1|2|3|5 2 2|4|5 3 4|6|3 4 5|2|3|1 我想根据匹配的技能搜索并列出id。如果我想列出包含3的技能id,我必须列出id1,3,4。例如,如果我想列出包含1,5(1或5或两者)(如多个值1,4,3)的技能id,那么我想列出1,2,4(我也想列出2)。任何帮助都将不胜感激 提前感谢。使用

在我的mysql表中,其中一个字段存储了(1 | 2 | 3)这样的值

  id   Skills
 ----  --------
   1   1|2|3|5
   2     2|4|5
   3    4|6|3
   4    5|2|3|1
我想根据匹配的技能搜索并列出id。如果我想列出包含
3
的技能id,我必须列出id
1,3,4
。例如,如果我想列出包含
1,5(1或5或两者)
(如多个值1,4,3)的技能id,那么我想列出
1,2,4(我也想列出2
)。任何帮助都将不胜感激

提前感谢。

使用

但实际上,您应该更改数据库结构。始终在列中存储单个值以避免此类问题

这可能有助于:

SELECT * FROM YOUR_TABLE
WHERE Skills REGEXP '[[:<:]]1[[:>:]]' = 1
OR Skills REGEXP '[[:<:]]5[[:>:]]' = 1
从您的_表中选择*
其中技能REGEXP'[[::]]'=1
或技能REGEXP'[[::]]'=1

您试过这个吗<代码>mysql>选择在_集合中查找_('3','1 | 3')它仅适用于逗号分隔的字符串手动状态:“字符串列表是由“,”字符分隔的子字符串组成的字符串。”。我看到您现在执行了一个
replace()
,但这会影响性能,因为它会执行完整的表扫描。谢谢您的提示。没有注意到
|
“任何帮助都将不胜感激。”-太好了,下面是:拿起一本关于规范化的书。您需要一个
Person\u Skills
junction表,在这里您可以在每一行上链接
PersonID
SkillID
。单个列中的分隔值只是等待发生的灾难。如果你想为所有人移除技能5,或者想找到所有拥有技能2但没有技能3的人,等等,那该怎么办。谢谢。这个正则表达式要匹配整个单词。也就是说,如果你有1 | 2 | 3,那么1,2和3是整个单词。你也可以尝试
find_in_set
solution with replace,我认为这是更好的解决方案。我已经尝试了find in set和REGEXP,都很有效,谢谢。
SELECT * FROM YOUR_TABLE
WHERE Skills REGEXP '[[:<:]]1[[:>:]]' = 1
OR Skills REGEXP '[[:<:]]5[[:>:]]' = 1