【问题标题】:Grouping together in HTML similar rows of a MySQL table在 MySQL 表的 HTML 相似行中分组在一起
【发布时间】:2016-09-30 13:20:33
【问题描述】:

我有一个 MySQL 数据库表,用于保存用户的反馈(列“feed”)。 他们既可以提出问题(type = que,ref = 0)也可以回复(type = ans)发布的问题。 'ref' 列显示了他们引用的问题的 'id':

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 格式显示此表格。我想将所有具有相同“参考”的答案放在一起,并在他们所指的问题下方显示。

使用 ORDER 的 PHP 查询,例如:

"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

我可能需要用相同的“ref”计算所有答案,并构建一个行跨度。 有没有人遇到过类似的挑战?

【问题讨论】:

  • 那么...很像一个主题论坛?
  • 是的。但我已经构建了它的最低限度......如你所见。

标签: php html mysql html-table sql-order-by


【解决方案1】:

以下查询将返回父线程id 排序的feedback 表中的记录,父线程中的记录出现在子线程之前。

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

【讨论】:

  • @Alex 这个查询应该基本上可以工作。如果您有任何其他需求,请告诉我,我可以更新。
  • 蒂姆,很好的解决方案。我不知道你可以在 ORDER 中使用 THEN 和 ELSE。
  • 哈哈……我也没有;-P
猜你喜欢
  • 2014-03-18
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多