2012-02-21 56 views
0

我有兩個表格,我想連接用逗號分隔的值並顯示它們一個字段顯示包含另一個表格中的id的所有值。MySQL結果由逗號分隔的列表和不同表格中的值

實施例:

這是表1

-------------------------------------- 
| id | title | area   | 
| -----------------------------------| 
| 1 | hi  | 1,12,14  | 
| -----------------------------------| 
| 2 | by  | 12,14,2  | 
| -----------------------------------| 
| 3 | me  | 14,2   | 
-------------------------------------- 

這是表2

--------------------- 
| id | name | 
|-------------------| 
| 1 | Wa  | 
|-------------------| 
| 12 | La  | 
|-------------------| 
| 14 | Sa  | 
|-------------------| 
| 2 | Tn  | 
--------------------- 

我想顯示這些

------------------------------------ 
| id | title | area  | 
|----------------------------------| 
| 1 | hi  | Wa,La,Sa | 
|----------------------------------| 
| 2 | by  | La,Sa,Tn | 
|----------------------------------| 
| 3 | me  | Sa,Tn  | 
------------------------------------ 

只需通過從表1替換值來自table2的名稱通過id。

回答

4

理想情況下,你應該創建一個名爲例如新表table1_has_table2

CREATE TABLE table1_has_table2 (
    table1_id INT(11) UNSIGNED NOT NULL, 
    table2_id INT(11) UNSIGNED NOT NULL, 
    PRIMARY KEY (table1_id,table2_id) 
) 

然後,這可以讓你的N:要執行米的關係很簡單,即

SELECT 
    table1.id, 
    table1.title, 
    GROUP_CONCAT(table2.name) AS area 

FROM table1 

INNER JOIN table1_has_table2 
ON table1_has_table2.table1_id = table1.id 

INNER JOIN table2 
ON table2.id = table1_has_table2.table2_id 

GROUP BY table1.id 

這種方法也更爲有效從長遠來看

+0

我應該像這樣創建表嗎? CREATE TABLE table1_has_table2( table1_id INT UNSIGNED PK, table2_id INT UNSIGNED PK ) 因爲它給我的SQL語法錯誤。 – Dar 2012-02-21 13:13:40

+0

用適當的SQL更新,而不是速記 – 2012-02-21 13:15:23

+0

它似乎工作,但我沒有得到任何結果「MySQL返回一個空的結果集」。順便說一句,table1_has_table2.table2.id需要是table1_has_table2.table2_id? – Dar 2012-02-21 13:30:13

相關問題