加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2020-12-13 22:54:49 所属栏目:PHP教程 来源:网络整理
导读:我有两个数据库表,如下所示: 表格 我 姓名 字段(varchar-255) FormFields 我 姓名 InputType Form的示例数据 Id Name Fields1 Form1 1,2,32 Form2 1,2 FormFields的示例数据 Id Name InputType1 FName TEXT2 Lname TEXT3 Email TEXT 现在我写下查询如下: S
我有两个数据库表,如下所示:

>表格

>我
>姓名
>字段(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)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读