php – 获取ID加入逗号分隔列表的所有匹配记录

我有两个数据库表,如下所示:

>表格

>我
>姓名
>字段(varchar-255)

> FormFields

>我
>姓名
> InputType

Form的示例数据

Id    Name     Fields
1     Form1    1,2,3
2     Form2    1,2

FormFields的示例数据

Id    Name     InputType
1     FName    TEXT
2     Lname    TEXT
3     Email    TEXT

现在我写下查询如下:

SELECT * FROM FormFields 
WHERE Id IN (SELECT Fields FROM Form WHERE Id = 2)

我只得到一条记录如下:

Id    Name     InputType
1     FName    TEXT

但我想要FormFields表的所有记录,其Id存在于Form表的Fields列中.我想要这样的结果:

Id    Name     InputType
1     FName    TEXT
2     Lname    TEXT

解决方法

您不能使用IN在逗号分隔的“字符串”中搜索特定值.
您可以使用 FIND_IN_SET

SELECT FormFields.*
FROM Form
INNER JOIN FormFields ON FIND_IN_SET(FormFields.id,Form.Fields) > 0
WHERE Form.Id = 2

结果:

+------+-------+-----------+
| Id   | Name  | InputType |
+------+-------+-----------+
|    1 | FName | TEXT      |
|    2 | Lname | TEXT      |
+------+-------+-----------+

SQL Fiddle

话虽如此,我建议创建一个将Forms连接到Fields的多个表.表格结构粗略轮廓:

>表格(身份证,姓名)>字段(id,名称,类型)> FormField(form_id,field_id)

相关文章

文章浏览阅读8.4k次,点赞8次,收藏7次。SourceCodester Onl...
文章浏览阅读3.4k次,点赞46次,收藏51次。本文为大家介绍在...
文章浏览阅读1.1k次。- php是最优秀, 最原生的模板语言, 替代...
文章浏览阅读1.1k次,点赞18次,收藏15次。整理K8s网络相关笔...
文章浏览阅读1.2k次,点赞22次,收藏19次。此网络模型提供了...
文章浏览阅读1.1k次,点赞14次,收藏19次。当我们谈论网络安...