从MySQL表生成报告

时间:2009-03-27 01:34:06

标签: php mysql database-design reporting

假设您有一堆MySQL表,并且您希望最终用户能够使用PHP脚本生成包含该数据的报告。您可以在下拉列表中显示这些表中的字段名称,因此用户可以说“first_name等于John”。大。但是,如果您希望这些字段名称更具可读性呢?例如,我希望用户能够选择“First Pet的名字”作为字段,而不是“first_pet_name”。我绝对不希望将这些信息存储在标记中,因为我们可能会经常添加和删除表。什么是最简单的方法来解决这个问题?

6 个答案:

答案 0 :(得分:1)

我会做一些简单的事情,例如用空格替换下划线,并在上面写上第一个字母。

答案 1 :(得分:1)

您可以创建表,将文本信息绑定到表+列对。假设您有一个表用户,并且您希望显示列名称'First Of First Pet'而不是 first_name

假设(表名 ColumnTextInformations ):

ParentTable | ParentColumn | Text
      users |   first_name | Name of First Pet
...

因此,您的列标签具有唯一标识符。

使用它很容易:

SELECT Text 
FROM ColumnTextInformations
WHERE parentTable = ? AND parentColumn = ?

答案 2 :(得分:1)

我将它存储在数据库中。

CREATE TABLE human_labels (
    schema  varchar(64) not null,
    table   varchar(64) not null,
    column  varchar(64) not null,
    label   tinytext    not null,
    primary key (schema, table, column)
);

模式是你在mysql中通常称为“数据库”的模式(切换数据库时USE之后的模式);而且表和列非常明显。

当然,每当更改架构时,您都必须确保DBA更新。

我相信MySQL允许对表进行评论,但不允许对列进行评论,或者您可以使用它。

编辑:将varchar更改为64,因为这是MySQL手册记录的最大大小。此外,如果您愿意,您可以对每一列进行评论 - 您可以从information_schema.columns中读取这些内容。但我仍然按照上面显示的方式进行操作,因为它更灵活(您可以轻松地在其中添加其他数据,例如“我应该显示此字段”标记)并且还允许将注释用于其预期目的。 / p>

答案 3 :(得分:0)

最简单的解决方案是使用分隔标识符。这允许您拼写包含空格,标点符号和特殊字符,SQL关键字等的表名和列名。

您必须在SQL查询中分隔表名和列名(包括用于定义它们的CREATE TABLE语句)。

CREATE TABLE `User Facts` (
  `User Name`         VARCHAR(100)
  ...
  `Name of First Pet` VARCHAR(100)
  ...
);

SELECT `Name of First Pet`
FROM `User Facts`
WHERE `User Name` = 'Bill';

默认情况下,MySQL使用反向标记(如上所示)作为分隔标识符。

有关详细信息,请参阅“Do different databases use different name quote”。

答案 4 :(得分:0)

我不是说这是一个好主意,但从技术上讲 - 技术上 - 如果你在整个代码中用反引号包围这些标识符,MySQL将允许你创建包含空格的表和列。例如:

mysql> create table `This is a Table` (`First Name` varchar(50),
    `Name of First Pet` varchar(20));
Query OK, 0 rows affected (0.06 sec)

mysql> insert into `This is a Table` values ('Tom', 'Skippy');
Query OK, 1 row affected (0.01 sec)

mysql> select * from `This is a Table`;
+------------+-------------------+
| First Name | Name of First Pet |
+------------+-------------------+
| Tom        | Skippy            |
+------------+-------------------+
1 row in set (0.00 sec)

答案 5 :(得分:0)

从未听说过列别名?

选择 宠物AS Name of First Pet, user_name AS Name of User 来自用户 用户='比尔';