2012-02-21 44 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

相关问题