MySQL结果以逗号分隔的列表和来自不同表的值

时间:2012-02-21 11:44:48

标签: mysql join

我有两个表,我想加入用逗号分隔的值,并向它们显示一个字段,显示包含另一个表中的id的所有值。

示例:

这是table1

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

这是table2

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

只需将table2中的值替换为table2中的名称。

1 个答案:

答案 0 :(得分: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:m关系,即

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

从长远来看,这种方法效率更高