-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です。

今、私は質問として結果が必要であり、次にその答えなどが必要です。

最初の質問とその質問のすべての回答のような出力が必要です。次に2番目の質問とその質問のすべての回答...

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

2 に答える 2

1

これが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) 

これは、1つのレベルの質問/回答に対してのみ機能します。したがって、回答にサブ質問とサブ回答を含めることができる場合、このソリューションは機能しません。より良い解決策があると確信しています。

1つのクエリで実行する場合は、次のように実行できます。

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 に答える