2016-09-30 7 views
0

私はフィードバックを保存するMySQLデータベーステーブルを持っています(カラム 'feed')。 投稿された質問には、(タイプ = que、ref = 0)、返信することができます(タイプ = ans)。私はHTMLでこのテーブルを表示しようとしています、今MySQLテーブルのHTML同様の行内でグループ化

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 

: 「REF」列には、を参照して、質問の「ID」を示しています。私はすべての回答を同じ「ref」でまとめて、それらが参照する質問の下に表示したいと思います。 ORDERを使用して

A 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」がすべての答えをカウントし、ROWSPANを構築する必要があります。 誰も似たような挑戦をしたことがありますか?

+0

だから、かなりスレッドフォーラムのようなものですか? – CD001

+0

はい。しかし、私はそれを最小限に構築しています...あなたが見ることができるように。 – Alex

答えて

2

次のクエリは、で注文されたfeedbackテーブルのレコードを返します。親スレッドのレコードは、子の前に表示されます。

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

説明:

ORDER BYは、順序付けのために2つの基準を使用しています。まず、refが0(親スレッドを示す)である場合はid、子スレッドを示す場合は0でない場合はrefとなります。子スレッドの前に親スレッドを配置するには、次にidを指定します。これは、親スレッドが常にその子より小さいidを持つために機能します。

+0

@Alexこのクエリは基本的に動作します。他のニーズがある場合は、私が更新できることを教えてください。 –

+0

ティム、素晴らしい解決策。私はあなたがTHENとELSEをORDERで使うことができるのか分かりませんでした。 – Alex

+0

LOL ...どちらもしなかった;-P –

関連する問題