如何为管道“ |”编写选择查询列中的分隔值?

时间:2020-01-24 07:40:26

标签: php mysql

我为实际问题编辑了帖子

我试图建立一个电影网站。
我有一个电影

id, moviename,  actorsid
1,  movie1,     1|2|3
2,  movie2,     1|5|4

我有一个演员

id, actorname
1,  actor1
2,  actor2
3,  actor3

我想显示所有演员的电影,所以我在movie表中进行了SELECT查询,并带有演员ID。

SELECT * FROM `movies` WHERE actors_id IN('4')

如果电影只有我的演员ID,则运行成功

SELECT * FROM `movies` WHERE actors_id LIKE '%4%'

如果我没有其他包含4的ID,则可以成功运行。例如41或14或214

1 个答案:

答案 0 :(得分:1)

选项1: 您可以尝试以下操作:

SELECT * FROM `TB` WHERE 
  usersid REGEXP '^31\\|' OR
  usersid REGEXP '\\|31$' OR
  usersid REGEXP '\\|31\\|' 

提琴:http://sqlfiddle.com/#!9/b88de5/22

在实施之前,请测试所有方案。

选项2:您可以在将管道替换为逗号后使用FIND_IN_SET,如下所示:

SELECT * FROM `TB` WHERE FIND_IN_SET("31",replace(usersid,"|",","))

提琴:http://sqlfiddle.com/#!9/b88de5/6