2013-07-11 2 views
1

두 개의 테이블을 만들었습니다. 첫 번째 테이블은 파일의 메타 데이터를 보유합니다.데이터베이스에 두 개의 테이블 결합

create table filemetadata (
id varchar(20) primary key , 
filename varchar(50), 
path varchar(200), 
size varchar(10), 
author varchar(50) 
) ; 

+-------+-------------+---------+------+---------+ 
| id | filename | path | size | author | 
+-------+-------------+---------+------+---------+ 
| 1  | abc.txt  | c:\files| 2kb | eric | 
+-------+-------------+---------+------+---------+ 
| 2  | xyz.docx | c:\files| 5kb | john | 
+-------+-------------+---------+------+---------+ 
| 3  | pqr.txt  |c:\files | 10kb | mike | 
+-------+-------------+---------+------+---------+ 

두 번째 테이블에는 위의 표에있는 특정 파일에 대한 "즐겨 찾기"정보가 들어 있습니다. 여기

create table filefav (
fid varchar(20) primary key , 
id varchar(20), 
favouritedby varchar(300), 
favouritedtime varchar(10), 
FOREIGN KEY (id) REFERENCES filemetadata(id) 
) ; 

+--------+------+-----------------+----------------+ 
| fid | id | favouritedby | favouritedtime | 
+--------+------+-----------------+----------------+ 
| 1  | 1 | ross   | 22:30   | 
+--------+------+-----------------+----------------+ 
| 2  | 1 | josh   | 12:56   | 
+--------+------+-----------------+----------------+ 
| 3  | 2 | johny   | 03:03   | 
+--------+------+-----------------+----------------+ 
| 4  | 2 | sean   | 03:45   | 
+--------+------+-----------------+----------------+ 

는 "ID는 '외래 키입니다. 두 번째 표는 사람이 그/그녀의 즐겨 찾기로 된 문서를 표시시킨 보이고있다. ID = 1 표시되었습니다 마음에 드는 표현 예 : 파일 abc.txt .?

,536,913 내가 어떻게 이것을 달성 할

+-------+-------------+---------+------+---------+---------------+ 
| id | filename | path | size | author | favouritedby | 
+-------+-------------+---------+------+---------+---------------+ 
| 1  | abc.txt  | c:\files| 2kb | eric | ross, josh | 
+-------+-------------+---------+------+---------+---------------+ 
| 2  | xyz.docx | c:\files| 5kb | john | johny, sean | 
+-------+-------------+---------+------+---------+---------------+ 
| 3  | pqr.txt  |c:\files | 10kb | mike | NULL   | 
+-------+-------------+---------+------+---------+---------------+ 

을 - 로스와 조쉬으로 (열 favouritedby 참조)

을 그래서 난 싶은 일을하는 것은 다음과 같은 정보를 표시하는 테이블/뷰를 얻을 수 있습니다 63,210

+0

'JOIN'을 살펴보십시오. http://dev.mysql.com/doc/refman/5.0/en/join.html –

답변

3

사용 JOIN (내 머리의 상단에서, 더 확인이 이루어지지) :

SELECT filemetadata.id, filename, path, size, author, GROUP_CONCAT(favouritedby) 
FROM filemetadata 
LEFT JOIN filefav ON filemetadata.id=filefav.id GROUP BY filemetadata.id 
+0

이것이 작동하지 않습니다. 위의 예제 에서처럼 단일 셀에 id = 1로 표시된 특정 파일 (예 : abc.txt)을 좋아하는 'favouritedby'열의 모든 이름을 원합니다. –

+0

@ user2492264해야합니다. 그것은'GROUP_CONCAT'입니다. 지금 가지고있는 것에 대해 질문을하고, 어떤 결과를 얻으며, 무엇을 기대할 수 있습니까? –

+0

[여기에서 볼 수 있습니다.] (https://docs.google.com/file/d/0B-1YKc00rScsNHhRWXF1OXYwcHM/edit?usp=sharing) –

-1

두 테이블의 UNION을 생성하는 뷰를 생성합니다 :

CREATE VIEW filefavs AS 
SELECT * FROM filemetadata 
UNION 
SELECT * FROM filefav 
+2

아니요. 그는'JOIN '과'GROUP_CONCAT'이 필요합니다. –

2

Select A.*,B.favouritedby FROM filemetadata A Left join (Select id,Group_Concat(favouritedby) from filefav group by id) B ON A. 식 B.Id