0

コメント付きのデータベース(具体化されたパス)(mysql)があります。「select * from comm where post_id=10 order by path ASC」を使用してすべての通信を選択すると、その結果、古い日付が上、新しい日付が下になるパス順の投稿からのコメントが表示されます。

それで、disqusのように上に新しいものを選択する方法はありますか? 単純に「パスDESCで注文」すると、ブランチが逆さまに表示されますが、それは私が望むものではありません。だから私は日付(上に新しい通信)とパスで注文する必要があります。ありがとう。!

大きな写真へのリンクhttps://drive.google.com/file/d/0BwIgYhO9h960ZTl4a24wNXFFQnM/view?usp=sharing

より大きな写真

4

3 に答える 3

2

最初のポイントの後の部分を見つけるだけです。

次に、最初の部分まで DESC を注文し、最後の部分の後に ASC を注文します。

SELECT * FROM comments 
  WHERE post_id=10
  ORDER by substring_index(path, '.', 1) DESC,
      path ASC

添付ファイルの 3 列目にエラーがあり、9972 と 9974 が逆になっていることに注意してください。

この場合、MySQL 最適化エンジンがパスに設定されたインデックスを使用して結果をソートするかどうかはわかりません。モデルに列を追加する方が効率的です。

于 2015-02-17T08:26:30.133 に答える
0

クエリの組み合わせが必要なようです:

  1. マスター コメント (親のないコメント) が選択され、降順で並べ替えられる選択クエリを作成します。
  2. これらの結果を親レコードを持つコメントと組み合わせて、それらのエントリを日付の昇順で並べ替えます。

ユニオンを含むクエリを調べることをお勧めします。そうすれば、両方の結果セットを組み合わせることができます。これの欠点は、多数のレコードがある場合にクエリのパフォーマンスが影響を受ける可能性があることです。その場合は、自己結合クエリなどを調べることができます。

于 2015-02-16T08:29:58.803 に答える