2009-03-27 3 views
3

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

ответ

1

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

+0

Это хорошая идея иметь пробелы во имя ваших таблиц? – Matthew

+0

Я думаю, что он хочет динамически заменить символы подчеркивания пробелами, прежде чем показывать их пользователю. Фактически помещение пробелов в именах появляется в моем более позднем ответе, а другое - у Билла Карвина, но я не могу сказать, что действительно рекомендую это решение. – yukondude

+0

Это замечательно, если только я не хочу указывать поля, которые можно искать (это предотвращает увязку выпадающего списка с ненужными полями). Наличие другой таблицы, в которой будут указаны «человеческие ярлыки», позволит мне сделать это и решить мою оригинальную проблему. – Matthew

1

Вы можете создать таблицу, чтобы привязать текстовую информацию к парам таблицы + столбца. Допустим, у вас есть таблица пользователей, и вы хотите указать название столбца «Имя первого питомца» вместо first_name.

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

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

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

С его помощью очень легко:

SELECT Text 
FROM ColumnTextInformations 
WHERE parentTable = ? AND parentColumn = ? 
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 составляет как максимальный размер. Кроме того, оказывается, вы можете поместить комментарий к каждому столбцу, если хотите, - и вы можете прочитать их обратно из информационных_схем. Columns. Но я по-прежнему делал это так, как показано выше, как более гибкий (вы можете легко добавить туда дополнительные данные, например, флаг «Я должен показать это поле»), а также позволяет использовать комментарии по назначению.

+0

Я думаю, что это лучший способ. Метаданные позволят вам создавать более гибкие и масштабируемые отчеты. Вы можете сохранить некоторую другую информацию, которая может позволить вашему пользователю получить более качественные и полезные отчеты. – Cesar

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" для более подробной информации.

+0

D'oh, вы избили меня до идеи обратного хода. Хорошо на ya. – yukondude

+0

Таким образом, это безумие. И LART от каждого администратора баз данных и программиста, который должен набирать эти имена - цитирование и все - для всех своих запросов. Если вы это сделаете, пожалуйста, используйте представления для создания этих имен! – derobert

+0

@derobert: Вы никогда не видели SQL-идентификатор, записанный с международным символом? –

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) 
0

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

ВЫБРАТЬ животное AS Name of First Pet, user_name AS Name of User от пользователей WHERE User = 'Bill';

 Смежные вопросы

  • Нет связанных вопросов^_^