2016-09-30 5 views
0

У меня есть таблица базы данных MySQL, в которой я сохраняю обратную связь (столбец «feed») от пользователей. Они могут оба задать вопрос (тип = que, с ref = 0) и ответить (тип = ans) на размещенные вопросы. «исх» колонка показывает «идентификатор» вопроса они относятся к:Группировка в HTML-подобных строках таблицы MySQL

id  username  feed   type  ref 
1  mr_x  question_1  que  0 
2  mrs_y question_2  que  0 
3  mr_z  answer_to_2  ans  2 
4  mr_z  answer_to_1  ans  1 
5  mr_x  answer_to_2  ans  2 

Теперь я пытаюсь показать таблицу в HTML. Я хотел бы привести все ответы с тем же «ref» вместе и показать их ниже вопроса, на который они ссылаются.

PHP-запрос с использованием ORDER, например:

"SELECT * FROM feedback ORDER BY ref ASC"; 

здесь не работает.

Мой желаемый результат в HTML будет:

mr_x  question_1  que  0 
mr_z  answer_to_1  ans  1 
mrs_y question_2  que  0 
mr_z  answer_to_2  ans  2 
mr_x  answer_to_2  ans  2 

Я, вероятно, нужно подсчитать все ответы с тем же «исх», и построить RowSpan. У кого-нибудь был такой же вызов?

+0

Итак ... в значительной степени, как форум с резьбой? – CD001

+0

Да. Но я построил его минимально ... как вы можете видеть. – Alex

ответ

2

Следующий запрос вернет записи из таблицы feedback, упорядоченной родителем id, с записью из родительского потока, появляющейся перед дочерними элементами.

SELECT f.* 
FROM feedback f 
ORDER BY CASE WHEN f.ref = 0 THEN f.id ELSE f.ref END, 
     f.id 

Объяснение:

ORDER BY использует два критерия для заказа. Во-первых, он заказывает id, когда ref равен нулю (указывает родительский поток) или ref, когда он не равен нулю, указывая дочерний поток. Затем, чтобы поместить родительский поток перед дочерними элементами, он заказывает следующий номер id. Это работает, потому что родительский поток всегда будет иметь id, который меньше его детей.

+0

@Alex Этот запрос должен работать в основном. Если у вас есть другие потребности, дайте мне знать, что я могу обновить. –

+0

Тим, отличное решение. Я не знал, что вы можете использовать THEN и ELSE в ORDER. – Alex

+0

LOL ... не сделал я ;-P –

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