Mysql - Rows into Columns


Mysql - Rows into Columns

问题:

如何将下表中的数据导出到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导出。不要忘记索引!