-4

我有下表,我在其中存储问题和带有问题 ID 的多个答案,如下所示

table
ID Content QID
1  Q1      0
2  Q2      0
3  A1      1
4  A1      2
5  A2      1
6  A2      2

在上面的示例中,Q 代表问题,A 代表答案

现在我需要结果作为问题,然后是它的答案等等,例如

我需要像第一个问题这样的输出,然后是该问题的所有答案..然后是第二个问题和该问题的所有答案...

1 Q1
3 A1
5 A2
2 Q2
4 A1
6 A2
4

2 回答 2

1

这是一个便宜的解决方案(用 MySQL 测试):

SET @max_id = (SELECT MAX(ID) FROM `table`);
SELECT * FROM `table` ORDER BY IF(QID > 0, @max_id * QID + ID, @max_id * ID) 

它仅适用于一级问题/答案。因此,如果答案可以包含子问题和子答案,则此解决方案将不适合您。我确信有更好的解决方案。

如果你想在一个查询中运行它,你可以这样做:

SELECT * FROM `table`
ORDER BY IF(QID > 0,
  (SELECT MAX(ID) FROM `table`) * QID + ID,
  (SELECT MAX(ID) FROM `table`) * ID) 
于 2012-11-29T08:35:35.350 回答
1

首先,我真的认为这是存储数据的不好方法。其次,我什至认为这是检索数据的不好方法......

无论如何,我还没有为您的结果找到 SQL 语句,但也许这可以帮助您:

SELECT question.ID as QuestionID, question.Content as Question, 
answer.ID as AnswerID, answer.Content as Answer 
FROM Test question, Test answer 
WHERE question.ID = answer.QID 
ORDER BY question.Content ASC

这应该允许你对结果做你想做的事......(用 SQL Server 测试)

于 2012-11-29T08:40:48.397 回答