具有动态字段的查询表

时间:2016-02-28 22:06:00

标签: mysql sql

enter image description here

我有一张表格中有结构的表格。所有具有相同lead_id的行(总共17个字段)符合帖子。也就是说,如何通过field_value过滤帖子?例如,查询具有field_value" ibague"的所有帖子。使用该表结构执行此操作似乎很棘手。我正在考虑使用主键lead_id创建另一个表,并为17个字段中的每一个创建一个列,并在mysql中使用某个可怕的游标导出数据,或者在php中导出一些循环,然后使表中的查询更容易查询。但是,如果添加了新字段,我将不得不手动创建另一列,并在每次有人访问报表模块时导出新数据。我的其他程序员有什么想法吗?

非常感谢。

1 个答案:

答案 0 :(得分:1)

这是数据库设计中常见的两难问题:灵活性与易于搜索。您当前的表结构针对灵活性进行了优化。这对你当前的应用是否有益,我们无法分辨,这是你必须做出的决定。

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

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的技术