Генерация отчетов из таблиц MySQL - PullRequest
3 голосов
/ 27 марта 2009

Допустим, у вас есть несколько таблиц MySQL, и вы хотите, чтобы ваши конечные пользователи могли создавать отчеты с этими данными с помощью сценария PHP. Вы можете представить имена полей из этих таблиц в раскрывающемся списке, чтобы пользователь мог сказать: «first_name равно Джону». Отлично. Но что, если вы хотите, чтобы имена этих полей были немного более читабельными? Например, я бы хотел, чтобы пользователь мог выбрать «Имя первого питомца» в качестве поля вместо «first_pet_name». Я определенно не хочу хранить эту информацию в разметке, поскольку мы можем добавлять и удалять таблицы довольно часто. Какой самый простой способ это осуществить?

Ответы [ 6 ]

1 голос
/ 27 марта 2009

Я бы сохранил его в базе данных.

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 при переключении баз данных); и таблица и столбец довольно очевидны.

Конечно, вы должны быть уверены, что администратор базы данных обновляет это при каждом изменении схемы.

Я считаю, что MySQL позволяет комментировать таблицу, но не столбец, или вы можете использовать это.

Редактировать : изменен varchar на 64, потому что это то, что указано в руководстве MySQL как максимальный размер. Кроме того, оказывается, что вы можете добавить комментарий к каждому столбцу, если хотите, - и вы можете прочитать их в файле information_schema.columns. Но я все же сделал бы это, как показано выше, так как он более гибкий (вы можете легко добавить туда дополнительные данные, такие как ваш флаг «Я должен показать это поле»), а также позволяет использовать комментарии по назначению. 1013 *

1 голос
/ 27 марта 2009

Вы можете создать таблицу, чтобы связать текстовую информацию с парами таблица + столбец. Допустим, у вас есть таблица users , и вы хотите показать имя столбца 'Name Of First Pet' вместо first_name .

Допустим, (имя таблицы ColumnTextInformations ):

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

Таким образом, у вас есть уникальные идентификаторы для меток столбцов.

С его помощью это очень просто:

SELECT Text 
FROM ColumnTextInformations
WHERE parentTable = ? AND parentColumn = ?
1 голос
/ 27 марта 2009

Я бы сделал что-то простое, например, заменив подчеркивания пробелами, а верхний регистр первой буквы.

0 голосов
/ 29 марта 2009

Когда-либо слышал псевдонимы столбцов?

ВЫБРАТЬ домашнее животное AS Name of First Pet, имя пользователя AS Name of User ОТ пользователей ГДЕ пользователь = 'Билл';

0 голосов
/ 27 марта 2009

Я не говорю, что это хорошая идея, но технически - технически - 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)
0 голосов
/ 27 марта 2009

Самое простое решение - использовать идентификаторы с разделителями . Это позволяет записывать имена таблиц и столбцов, содержащие пробелы, знаки препинания и специальные символы, ключевые слова 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 по умолчанию использует обратные тики (как показано выше) для идентификаторов с разделителями.

Подробнее см. " Используют ли разные базы данных разные кавычки ".

...