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)

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...