Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从单个表中拆分MySQL中的数据_Mysql - Fatal编程技术网

从单个表中拆分MySQL中的数据

从单个表中拆分MySQL中的数据,mysql,Mysql,我有一张非常破旧的桌子: meetingid_bigint key field_prompt data_string 1 meeting_name Meeting Name Introduction 1 location_text Location Place Main Office 1 location_street Street Ad

我有一张非常破旧的桌子:

meetingid_bigint  key              field_prompt     data_string
1                 meeting_name     Meeting Name     Introduction
1                 location_text    Location Place   Main Office
1                 location_street  Street Address   Street number 1
1                 location_town    Location Town    Town
1                 time_start       Start Time       10.00 AM
2                 meeting_name     Meeting Name     Follow Up
2                 location_text    Location Place   Office
2                 location_street  Street Address   Street number 2
2                 location_town    Location Town    Town 2
2                 time_start       Start Time       1.00 PM
3                 meeting_name     Meeting Name     Introduction
3                 location_text    Location Place   Main Office
3                 location_street  Street Address   Street number 1
3                 location_town    Location Town    Town
3                 time_start       Start Time       8.00 AM
等等,大约有4000条记录。正如你们所看到的,同一个会议以一个新的号码一次又一次地举行。我想从
数据字符串
中分离出不同的
会议名称
位置
位置
开始时间
数据,这样我就可以将其放在单独的表中,并改用FK。这张桌子太疯狂了。所以问题是,如何在一个提取查询中获得所有具有相同名称和地点的会议?唯一的区别是时间。会议名称始终跟随城镇和地址

输出:

MeetingName      Location     Town      Address 
Introduction     Main Office  Town 1    Street number 1  
Follow Up        Office       Town 2    Street number 2
差不多吧

编辑

谢谢你,巴兰卡,这有点帮助

但现在我得到了这个输出:

meetingid_bigint    MeetingName    Location     Town    Address
1                   Introduction
1                                  Main Office
1                                               Town 1
1                                                      
2                   Follow Up
2                                  Office             
2                                                Town 2  
2                                                       Street Number 2
3                                                       Street Number 1
3
3
3                                                Town 1
尝试通过“MeetingName”更改为
组,然后我几乎得到了我想要的结果,所有的MeetingName都按顺序排列,没有配音,但没有位置、城镇或地址

select meetingid_bigint
    , case `key` when 'meeting_name' then data_string end as MeetingName
    , case `key` when 'location_name' then data_string end as Location
    , case `key` when 'location_street' then data_string end as Address
from main_meeting_table
group by MeetingName, Town
那个密码给了我会议的名字和城镇,但首先是所有的名字,然后是所有的城镇。这是正确的,所以问题是,我能以某种方式加入这两个人吗?

你会很痛苦的。您需要创建一个“透视”查询

MySQL不提供内置指令来构建pivot查询,但您可以手动构建:

select meeting_id
     , case `key` when 'meeting_name' then data_string end as MeetingName
     , case `key` when 'location_name' then data_string end as Location
     , case `key` when 'location_street' then data_string end as Address
     -- And so on
from your_table
group by meeting_id;
希望这有帮助


小评论:避免使用保留关键字(如
)作为列名

请编辑您的问题并显示您想要的结果。如果要将值放在一行中,则称为轴。你可以在谷歌上搜索“MySQL pivot”来找到实现这一点的方法。如果每次会议都可能有不同数量的属性与之关联,那么这种数据结构实际上并没有那么糟糕,特别是因为每个属性(键、字段提示、数据字符串)似乎都有不同的值关联。这实际上是在关系数据库中存储这些排序配置关系的一种非常常见的方法。现在,如果您发现每次会议总是只有5个属性,那么像您建议的那样的表结构可能是有意义的。在这种情况下,我认为您将有16个字段(id加上3*5个属性字段)。@MikeBrant是的,我知道,但我也需要从其他方面来解释为什么需要拆分它。是的,如果有人维护数据库并且熟悉它,这种结构就可以工作。问题是情况并非如此,而且还涉及其他表。因此,在本例中,我必须对多个具有相同值和联接的表进行查询。我的想法是将它分解为尽可能少的查询,并且至少让非sql人员更容易理解它。