微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐