我有两个表,我想加入用逗号分隔的值,并向它们显示一个字段,显示包含另一个表中的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中的名称。
答案 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
从长远来看,这种方法效率更高