Mysql - 进入列

时间:2011-10-27 10:05:01

标签: php mysql codeigniter

问题:

如何将下表中的数据导出到cvs excel文件中,以便dog_attributes中的所有属性都有自己的列,主要使用MySQL?

注意:

  • 我将一次为该group_id导出一个group_id和所有dog_attributes。
  • 每组可能有成千上万的狗和几百个group_elements。一世 主要使用MySQL而不是PHP循环会更好 自MySQL具有内置导出功能以来的速度。
  • 我的服务器使用PHP和Codeigniter Framework运行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组的最终Excel电子表格(group_id = 1):

+--------+----------+-----------+--------+
| dog_id | dog_name | height    | color  |
+--------+----------+-----------+--------+
| 1      | Rover    | 54 inches | brown  |
| 2      | Buck     | 34 inches | white  |
+--------+----------+-----------+--------+

第2组的最终Excel电子表格(group_id = 2):

+--------+----------+-----------+
| dog_id | dog_name | breed     |
+--------+----------+-----------+
| 3      | Rex      | husky     |
+--------+----------+-----------+

2 个答案:

答案 0 :(得分:2)

最快的方法是以编程方式处理这些属性 - 不使用SQL

你应该抓住所有的狗,在第二次请求你感兴趣的狗的所有属性并将其与foreach等合并

答案 1 :(得分:0)

我会创建一个包含字段的临时表:

group_id
dog_id
dog_name
elmt_name
attr_value

这是原始数据库的平面表示。两件重要的事情:

1)此表必须使用mysql存储过程生成,而不是使用php AND在一个事务中生成。否则,如果你有成千上万的狗,它将会很慢。

2)此平面表是报表的特殊缓存表。如果狗数据变化缓慢,则在更改狗数据之前无需删除它。

然后使用简单查询即可生成excel导出。不要忘记索引!