Предположим, у вас есть куча таблиц MySQL, и вы хотите, чтобы ваши конечные пользователи могли создавать отчеты с этими данными с помощью PHP-скрипта. Вы можете представить имена полей из этих таблиц в раскрывающемся списке, чтобы пользователь мог сказать: «first_name
равно Иоанну». Отлично. Но что, если вы хотите, чтобы эти имена полей были немного читабельны? Например, я хотел бы, чтобы пользователь мог выбрать «Имя первого любимца» в качестве поля, а не «first_pet_name
». Я определенно не хочу хранить эту информацию в разметке, так как мы можем часто добавлять и удалять таблицы. Какой самый простой способ снять это?Создание отчетов из таблиц MySQL
ответ
Я бы сделал что-то простое, как замена подчеркиваний пробелами, а верхняя часть корпуса - на первую букву.
Вы можете создать таблицу, чтобы привязать текстовую информацию к парам таблицы + столбца. Допустим, у вас есть таблица пользователей, и вы хотите указать название столбца «Имя первого питомца» вместо first_name.
Допустим (имя таблицы ColumnTextInformations):
ParentTable | ParentColumn | Text
users | first_name | Name of First Pet
...
Так у вас есть уникальные идентификаторы для ваших заголовков столбцов.
С его помощью очень легко:
SELECT Text
FROM ColumnTextInformations
WHERE parentTable = ? AND parentColumn = ?
Я бы сохранить его в базе данных.
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 составляет как максимальный размер. Кроме того, оказывается, вы можете поместить комментарий к каждому столбцу, если хотите, - и вы можете прочитать их обратно из информационных_схем. Columns. Но я по-прежнему делал это так, как показано выше, как более гибкий (вы можете легко добавить туда дополнительные данные, например, флаг «Я должен показать это поле»), а также позволяет использовать комментарии по назначению.
Я думаю, что это лучший способ. Метаданные позволят вам создавать более гибкие и масштабируемые отчеты. Вы можете сохранить некоторую другую информацию, которая может позволить вашему пользователю получить более качественные и полезные отчеты. – Cesar
Простым решением является использование идентификаторов с разделителями. Это позволяет вам указывать имена таблиц и имена столбцов, содержащие пробелы, знаки препинания и специальные символы, ключевые слова 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" для более подробной информации.
D'oh, вы избили меня до идеи обратного хода. Хорошо на ya. – yukondude
Таким образом, это безумие. И LART от каждого администратора баз данных и программиста, который должен набирать эти имена - цитирование и все - для всех своих запросов. Если вы это сделаете, пожалуйста, используйте представления для создания этих имен! – derobert
@derobert: Вы никогда не видели SQL-идентификатор, записанный с международным символом? –
Я не говорю, что это хорошая идея, но технически - технически - 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)
Всегда слышал псевдонимы столбцов?
ВЫБРАТЬ животное AS Name of First Pet
, user_name AS Name of User
от пользователей WHERE User = 'Bill';
Это хорошая идея иметь пробелы во имя ваших таблиц? – Matthew
Я думаю, что он хочет динамически заменить символы подчеркивания пробелами, прежде чем показывать их пользователю. Фактически помещение пробелов в именах появляется в моем более позднем ответе, а другое - у Билла Карвина, но я не могу сказать, что действительно рекомендую это решение. – yukondude
Это замечательно, если только я не хочу указывать поля, которые можно искать (это предотвращает увязку выпадающего списка с ненужными полями). Наличие другой таблицы, в которой будут указаны «человеческие ярлыки», позволит мне сделать это и решить мою оригинальную проблему. – Matthew