2011-04-21 33 views
1

晚安,請幫助,聯合3代表的MySQL(圖形解釋)

我不是在MySQL的專家,我有3個表,但我不能找到捧場決賽桌的方式一個特定的順序。

這裏是3張桌子,最後是最後一張桌子,因爲我想要決賽桌。 三江源

Table 1 (Joomla Users) 

------------------------------- 
|id(K)|username |email  | 
|-----|-----------|-----------| 
|71 |JOHN  |[email protected] | 
|-----|-----------|-----------| 
|72 |ANA  |[email protected] | 
|-----|-----------|-----------| 
|73 |PETER  |[email protected]| 
|-----|-----------|-----------| 
|74 |MARK  |[email protected]| 
|-----|-----------|-----------| 
|75 |TONY  |[email protected]| 
|-----|-----------|-----------| 




Table 2 (ExtraFields) 

------------------------- 
|Field_id(K)| Title  | 
|-----------|-----------| 
|1   |MARRIED | 
|-----------|-----------| 
|2   |CELL  | 
|-----------|-----------| 
|3   |GENRE  | 
|-----------|-----------| 
|4   |AGE  | 
|-----------|-----------| 
|5   |WEBPAGE | 
|-----------|-----------| 




Table 3 (ExtraFields values) 

------------------------------------- 
|Field_id(K)|JoomlaId(K)|Value  | 
|-----------|-----------|-----------| 
|1   |71   |YES  | 
|-----------|-----------|-----------| 
|2   |71   |555-4565 | 
|-----------|-----------|-----------| 
|3   |71   |Male  | 
|-----------|-----------|-----------| 
|4   |71   |34   | 
|-----------|-----------|-----------| 
|5   |71   |www.go.com | 
|-----------|-----------|-----------| 
|1   |75   |NO   | 
|-----------|-----------|-----------| 
|3   |72   |Female  | 
|-----------|-----------|-----------| 
|5   |72   |www.me.com | 
|-----------|-----------|-----------| 
|4   |74   |38   | 
|-----------|-----------|-----------| 
|3   |74   |Male  | 
|-----------|-----------|-----------| 
|1   |73   |NO   | 
|-----------|-----------|-----------| 
|2   |73   |234-5654 | 
|-----------|-----------|-----------| 
|3   |75   |MALE  | 
|-----------|-----------|-----------| 




Desired Resultant table (i don't know hoe=w to do it) 

---------------------------------------------------------------------------------- 
|id(K)|username |email  |Married |Cell  |Genre |Age |WebPage  | 
|-----|-----------|-----------|--------|---------|-------|-------|---------------| 
|71 |JOHN  |[email protected] |YES  |555-4565 |Male |34  |www.go.com  | 
|-----|-----------|-----------|--------|---------|-------|-------|---------------| 
|72 |ANA  |[email protected] |NO  |   |Female |  |    | 
|-----|-----------|-----------|--------|---------|-------|-------|---------------| 
|73 |PETER  |[email protected]|NO  |234-5654 |  |  |    | 
|-----|-----------|-----------|--------|---------|-------|-------|---------------| 
|74 |MARK  |[email protected]|  |   |Male |38  |    | 
|-----|-----------|-----------|--------|---------|-------|-------|---------------| 
|75 |TONY  |[email protected]|NO  |   |Male |  |    | 
|-----|-----------|-----------|--------------------------------------------------| 
+0

如果您真的在答案中以明文形式列出每個表的表名和字段名稱,那麼您更有可能獲得答案。 – 2011-04-21 00:17:56

+0

請不要鏈接到位圖中的表格佈局。這樣給你答覆太複雜了。只需花時間以文本形式輸入字段並指定要鏈接的字段。 – Johan 2011-04-21 00:19:35

+0

您正試圖將行放入列中。我不認爲這是可能的(據我所知)。你加入表格的方式,你一定會得到每個用戶多行的數據。 – JohnP 2011-04-21 04:57:34

回答

0

你有幾個選擇這裏。

基本回答你的問題是這樣的查詢..

SELECT u.*, 
c1.value AS 'Married', 
c2.value AS "Cell", 
c3.value AS "Genre", 
c4.value AS "Age", 
c5.value AS "WebPage" 
FROM users u 
LEFT JOIN extrafields_values c1 ON c1.joomla_id = u.id AND c1.field_id = 1 
LEFT JOIN extrafields_values c2 ON c2.joomla_id = u.id AND c2.field_id = 2 
LEFT JOIN extrafields_values c3 ON c3.joomla_id = u.id AND c3.field_id = 3 
LEFT JOIN extrafields_values c4 ON c4.joomla_id = u.id AND c4.field_id = 4 
LEFT JOIN extrafields_values c5 ON c5.joomla_id = u.id AND c5.field_id = 5 

但他是可怕的。每次運行此查詢時都會執行5次連接,並且如果添加新的額外字段,則需要添加連接。

你可以使用存儲過程動態地做到這一點,但是你這樣做,你會問MySQL做「非自然」的事情。

我強烈的建議是這樣的領域,你應該創建一個單一的表,並做一個單一的加入。

在某些情況下,您已經設置了一種鍵/值對錶 - 這裏有很多非常稀疏的extra_fields,但對於這種類型的數據(本質上是用戶元數據)我認爲你最好創建一個表 - 可以有空字段(它們幾乎不影響數據庫的大小),而且你的生活會更簡單!

+0

非常感謝,它按照我的意願工作。 – Nestorete 2011-04-24 02:53:24

0
**select** tbl_1.id, tbl_1.email , tbl_2.Field_id, tbl_2.Title, tbl_3.Field_id, tbl_3.joomlaId, tbl_3.value 
FROM Table1 tbl_1, Table2 tbl_2, Table3 tbl_3 
WHERE tbl_1.id = tbl_2.Field_id 
AND tbl_2.Field_id = tbl_3.joomlaId 

This would not produce your result but this is the way to link three tables using id fields. 
I hope this will give you and idea . at least.