2017-08-09 3 views
1

私はmysqlデータベースを持っています。 このデータベースに投稿を保持するテーブルを作成しました。MYSQLデータベースから子レコードを効率的に選択する

テーブルには、次の列があります。

p_id (primary key), post_header, creation_date, post_body, r_id, u_id 

ので、各レコードは、ポストを表します。

r_id参考資料p_id、それがヌルでない場合は、p_id(または投稿ID)への返信であることを示します。

私の問題は、1つのクエリですべての投稿を取得し、各投稿へのすべての返信をその下にグループ化することです。

例は、結果セット:

Result Set

だから基本的に私は、作成日の降順で順番に下にも作成日の降順、また巣回答によって私のグローバルな投稿を注文することができ、クエリを探しています。

私はこのような機能により、グループを使用してみました:

SELECT * FROM global_post group by r_id order by creation_date desc; 

が、それはしかし動作しません。このようにレコードをグループ化できるメカニズムはありますか?

私は、各副問合せする必要がありますする必要はありませんあなたはセクション

order by Case when r_id is null then p_id else r_id end 
+0

「groub by」節を調べることをお勧めします。それはあなたを助けるはずです。 – Alam

+0

私が使ったクエリで間違いました。私の編集内容を見てください。私が試したクエリは 'SELECT * FROM global_post group by r_id order by creation_date desc;'私はこれを行うとトリックだと思っていましたが、そしてそれは正しく見えません。 – SanzioSan

答えて

0

GROUP BY順にトリックを試すことができます

+0

これは私が必要とするものに非常に近いですが、私がcreation_date descでこのクエリを注文しようとすると、注文が破られます。私は試してみました: 'select * from global_post order from coalesce(r_id、p_id)、r_idがnullの場合は0、それ以外の場合は終了、creation_date desc' – SanzioSan

+1

この質問は正しい答えにつながります。 descで注文するには、合体関数の後にdescを入れなければなりません。最後に 'select * from global_post coalesce(r_id、p_id)descで注文してください。r_idがnullの場合は0、それ以外の場合は1終了、creation_date desc' – SanzioSan

0

を投稿するには、あなたが望むものではありませんこれは、データを集約するために使用されています。

coalesce(r_id, p_id)で注文してください。これにより、グローバルポストに子供と同じ注文が与えられます。次にglobal_postをcase文で一番上に置く2番目の順序を追加します。

+0

これはうまくいきませんでした。私が 'group by r_id'を使うときは何らかの理由で結果セットを2/17レコードに制限しています... – SanzioSan

+0

私はあなたがグループを必要としているとは思わない。これは主に注文問題です。 – Tlivanios

関連する問題