2012-02-21 4 views
0

У меня есть две таблицы, я хочу объединить значения, разделенные запятой, и показать их в одном поле, чтобы показать все значения, содержащие идентификатор из другой таблицы.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  | 
------------------------------------ 

Просто заменяя значения от table1 путем имена из таблицы2 по 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) 
) 

Это то позволяет вашей п: м отношения должны быть выполнены очень просто, т.е.

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

+0

Обновлено с помощью правильного SQL вместо сокращенного –

+0

Кажется, что он работает, но я не получаю никаких результатов. «MySQL возвратил пустой набор результатов». Btw, table1_has_table2.table2.id должен быть table1_has_table2.table2_id? – Dar

Смежные вопросы