mysql - 具有动态字段的查询表

标签 mysql sql

enter image description here

我有一张表格,其中包含图像中的结构。帖子由具有相同 Lead_id 的所有行(总共 17 个字段)组成。也就是说,如何通过 field_value 过滤帖子?例如查询所有具有 field_value“ibague”的帖子。使用该表结构来做到这一点似乎很棘手。我正在考虑用主键 Lead_id 创建另一个表,并为 17 个字段中的每一个创建一列,并使用 mysql 中的一些可怕的游标或 php 中的一些循环导出数据,然后使表中的查询更容易询问。但使用这种方法,如果添加新字段,我将必须手动创建另一列,并在每次有人访问报告模块时导出新数据。我的程序员 friend 们有什么想法吗?

非常感谢。

最佳答案

这是数据库设计中的一个常见困境:灵 active 与易于搜索。您当前的表结构已针对灵 active 进行了优化。我们无法判断这是否适合您当前的应用程序,这是您必须做出的决定。

但是,您也可以在当前结构中搜索表单:

select lead_id
from yourtable
where `value`='ibague'
and form_id=1 and field_number=73 --not clear from your description if these conditions are needed

如果您需要给定潜在客户的所有字段值,其中其中一个字段与搜索条件相匹配,则将上述查询放入子选择中:

select * from yourtable t1
inner join (
    select distinct lead_id
    from yourtable
    where `value`='ibague'
    and form_id=1 and field_number=73) t2 on t1.lead_id=t2.lead_id

如果匹配还需要 form_id,则将其包含在子查询的选择列表和联接的 on 子句中。

如果你决定扁平化数据结构,那么就不需要复杂的游标,只需使用名为dynamic pivoting or cross tabulated query的技术即可。

关于mysql - 具有动态字段的查询表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35688886/

相关文章:

mysql - 从mysql索引中获取基数可能性

mysql - 分页和并发更新

mysql加入一对多最后一条记录

SQL - 如何使用用户定义的函数来约束两个表之间的值

c# - dblinq 有多成熟?

mysql - 使用另一个表中的数据更新行

mysql - 将具有 1 到 N 关系的表合并为 1 行记录,并使用 N 条记录的最后一个值

php - 查询带领带的排行榜

sql - 在 WHERE 子句中重用子查询

php - Codeigniter Query Builder 在几个函数中调度