问题:
如何将下表中的数据导出到cvs-excel文件中,以便dog_attributes中的所有属性都有自己的列,主要使用MySQL?
注意:
- 我将一次导出一个group_id和该group_id的所有dog_attribute
- 每组可能有数千只狗和几百个group_elements。我认为主要使用MySQL而不是PHP循环会更好速度,因为MySQL有一个内置的导出功能
- 我的服务器正在运行带有PHP和Codeigniter框架的MySQL
示例:
有四张桌子。
group_tbl-组由管理员设置,用于包含公共元素。
+----+---------+
| id | var1 |
+----+---------+
| 1 | data |
| 2 | data |
+----+---------+
group_elements_tbl-包含管理员设置的元素。这些是用户填写的表单字段。
+----+----------+-----------+
| id | group_id | elmt_name |
+----+----------+-----------+
| 1 | 1 | height |
| 2 | 1 | color |
| 3 | 2 | breed |
+----+----------+-----------+
dogs_tbl-包含每个用户创建的狗。
+----+----------+---------+
| id | group_id | name |
+----+----------+---------+
| 1 | 1 | Rover |
| 2 | 1 | Buck |
| 3 | 2 | Rex |
+----+----------+---------+
dog_attributes_tbl-包含管理员在groups_elements_tbl中设置的自定义元素的值。
+----+--------------------+------------+
| id | group_elements_id | attr_value |
+----+--------------------+------------+
| 1 | 1 | 54 inches |
| 2 | 2 | brown |
| 3 | 1 | 34 inches |
| 3 | 2 | white |
| 4 | 3 | husky |
+----+---------+------------+
最终结果:
第1组(group_id=1(的最终Excel电子表格:
+--------+----------+-----------+--------+
| dog_id | dog_name | height | color |
+--------+----------+-----------+--------+
| 1 | Rover | 54 inches | brown |
| 2 | Buck | 34 inches | white |
+--------+----------+-----------+--------+
第2组(group_id=2(的最终Excel电子表格:
+--------+----------+-----------+
| dog_id | dog_name | breed |
+--------+----------+-----------+
| 3 | Rex | husky |
+--------+----------+-----------+
最快的方法是以编程的方式处理这些属性-不使用SQL
。
您应该获取所有dogs,在第二个请求中获取您感兴趣的dogs的所有属性,并将其与foreach
等合并
我会创建一个带有字段的临时表:
group_id
dog_id
dog_name
elmt_name
attr_value
这是原始数据库的平面表示。两件重要的事情:
1( 该表必须在一个事务中使用mysql存储过程NOT和php AND生成。否则,如果你有成千上万的狗,它会很慢。
2( 这个平面表是报表的一个特殊缓存表。如果狗的数据更改缓慢,则在更改狗的数据之前不需要删除它。
然后,通过一个简单的查询,您可以生成excel导出。不要忘记索引!