Mysql - объединить данные одной таблицы - PullRequest
3 голосов
/ 18 июня 2011

У меня есть таблица, где хранятся все комментарии.Некоторые комментарии - это вопросы, другие - ответы.Итак, моя таблица выглядит так:

id  parent_id   message is_answer   answered
1   0           2x2     0           1
2   1           4       1           0
3   0           5x9     0           0
4   1           2x9     0           0
5   1           2x8     0           1
6   5           16      1           0

И в результате я хотел бы получить эту таблицу:

q_id    q_message   q_answer 
1       2x2         4
3       5x9         NULL 
4       2x9         NULL
5       2x8         16

Итак, я хотел бы получить все вопросы иответы на них, если они существуют.

Ответы [ 2 ]

5 голосов
/ 18 июня 2011

Ничто не мешает вам присоединить таблицу к себе.

SELECT q.id AS q_id, q.message AS q_message, a.message AS q_answer
FROM table AS q
LEFT JOIN table AS a ON a.parent_id = q.id
WHERE q.is_answer = 0;

Обратите внимание, что это не совсем дает результат, который вы сказали, что вы хотите ... потому что он показывает все ответы на вопрос:

+------+-----------+----------+
| q_id | q_message | q_answer |
+------+-----------+----------+
|    1 | 2x2       | 4        | 
|    1 | 2x2       | 2x9      | 
|    1 | 2x2       | 2x8      | 
|    3 | 5x9       | NULL     | 
|    4 | 2x9       | NULL     | 
|    5 | 2x8       | 16       | 
+------+-----------+----------+
6 rows in set (0.00 sec)

В запрошенных выходных данных отображается только ответ «4» на вопрос 1. Я не уверен, что это было умышленно с вашей стороны - если это так, вам понадобится дополнительная GROUP BY или другая логика, чтобы отфильтровать ответы, которые вы не хотите отображать.

2 голосов
/ 18 июня 2011

не проверено, но это должно сработать:

select   q.id as q_id,q.message as q_message ,a.message as q_answer   FROM comments q LEFT OUTER JOIN comments a ON (a.parent_id = q.id and a.is_answer=1 and q.is_answer=0)

Я думаю, что ваш дизайн таблицы мог бы обойтись без столбца is_answer, вы можете просто установить parent_id = NULL, если это вопрос?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...