2013-07-11 23 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」是一個外鍵。 第二個表是表示人已標明該文件爲他/她的最愛。 例如將文件abc.txt按id = 1個已被標記爲代表的最愛(見列favouritedby)由羅斯和Josh

所以我要做的就是讓一個表/視圖,顯示的信息如下 -

+-------+-------------+---------+------+---------+---------------+ 
| 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   | 
+-------+-------------+---------+------+---------+---------------+ 

我如何做到這一點

+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

這不起作用。我希望'favouritedby'列中的所有名稱都像id = 1所示的特定文件(比如abc.txt),在上面的示例中顯示爲單個單元格。 –

+0

@ user2492264這是它應該做的。這是'GROUP_CONCAT'。你能否用你現在擁有的東西來闡述你的問題,你會得到什麼結果以及你的期望? –

+0

[你可以在這裏看到](https://docs.google.com/file/d/0B-1YKc00rScsNHhRWXF1OXYwcHM/edit?usp=sharing) –

-1

創建,創建兩個表的聯合視圖:

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

相關問題