2009-03-27 2 views
3

여러 테이블의 MySQL 테이블이 있으며 최종 사용자가 PHP 스크립트를 사용하여 해당 데이터로 보고서를 생성 할 수있게하려고한다고 가정 해 보겠습니다. 해당 테이블의 필드 이름을 드롭 다운에 표시 할 수 있으므로 사용자는 "first_name은 John과 같습니다."라고 말할 수 있습니다. 큰. 하지만 필드 이름을 좀 더 읽기 쉽게하려면 어떻게해야할까요? 예를 들어 사용자가 "first_pet_name"대신 "First Pet의 이름"을 필드로 선택할 수있게하고 싶습니다. 테이블을 꽤 자주 추가하고 제거 할 수 있으므로 마크 업에 해당 정보를 저장하고 싶지는 않습니다. 가장 간단한 방법은 무엇입니까?MySQL 테이블에서 보고서 생성

답변

1

밑줄을 공백으로 바꾸고 대문자를 첫 글자로 바꾸는 것과 같은 간단한 작업을 수행합니다.

+0

테이블 이름에 공백을 두는 것이 좋은 생각입니까? – Matthew

+0

나는 밑줄을 공백으로 동적으로 바꾸어 사용자에게 보여줄 것을 의미한다고 생각합니다. 빌 클린 (Bill Karwin)의 대답과 나중에 대답 할 때 실제로 이름에 공백을 두는 것이 그 해결책을 추천한다고 말할 수는 없다. – yukondude

+0

검색 가능한 필드를 지정할 수 있기를 바랄뿐입니다 (드롭 다운이 불필요한 필드로 허물어지는 것을 막기 위해). '인간의 레이블'에 대한 세부 정보를 제공하는 다른 테이블을 사용하면 그렇게 할 수 있었고 원래의 문제도 해결할 수있었습니다. – Matthew

1

테이블을 생성하여 텍스트 정보를 테이블 + 열 쌍에 바인딩 할 수 있습니다. 명의 사용자가이고 first_name 대신 '이름의 첫 번째 애완 동물'을 표시하려고한다고 가정 해 보겠습니다.

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

그래서 당신은 당신의 열 레이블에 대한 고유 식별자를 가지고 :

은 (테이블 이름 ColumnTextInformations)의가 있다고 가정 해 봅시다.

를 사용하여 매우 쉽게 :

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

어디 스키마는 일반적으로 (당신이 데이터베이스를 전환 할 때 USE 후 어떤 일이 일어나는지) MySQL의에서 "데이터베이스"라고 부릅니다; 테이블과 컬럼은 꽤 분명합니다.

물론 스키마를 변경할 때마다 DBA가이를 업데이트해야합니다.

MySQL은 테이블에는 주석을 허용하지만 열은 허용하지 않는다고 생각합니다.

편집 : varchar가 64로 변경되었으므로 MySQL 매뉴얼에서 최대 크기로 기록했기 때문입니다. 또한 원하는 경우 각 열에 주석을 달 수 있으며, 그 정보를 information_schema.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, 당신은 나를 백틱 아이디어로 때렸다. 좋아. – yukondude

+0

이런 식으로 광기가 있습니다. 또한 모든 DBA와 프로그래머가 제공하는 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

열 별칭이 있습니까?

SELECT 애완 Name of First Pet AS 사용자 사용자 = '빌 FROM USER_NAME AS Name of User ;