私はMySQLを使用しています。私は既にこれの重要な部分を担うクエリを持っています:同じテーブルから子 - 親の行を取得しています。行に基づいて異なる基準でソートする
テーブルcomments
から最新の親行を取得し、各親コメントについては、子供のコメントを取得し、最も古い順に並べ替えます。 注:parent_id
という列があります。すべての親は0
であり、もちろんすべての子供は0
より大きい。 また、それは、列のソートされたがcreate_date
と呼ばれ、親と子供の両方が(1がASCだった、もう1つはDESCであっても)create_date
、でソートされているので、これは非常になんとかでした。私はソートしたいので、注意すべき点は今
SELECT * FROM (
SELECT c1.*, c1.create_date ac, c1.create_date ap FROM comments c1
WHERE parent_id = 0 AND c1.profile_id = 582
UNION
SELECT c2.*, c2.create_date ac, p.create_date ap FROM comments c2
JOIN comments p ON c2.parent_id = p.id
WHERE c2.profile_id = 582
) c
ORDER BY c.ap DESC, c.ac ASC;
を:
今私は私がここでやっているようユーザーは「トップ」のコメントだけでなく、「最新」でソートするためのオプションを追加したいです両親はvotes
(DESC)という列で、子ども(またはコメントの返信)は上記と同様にcreate_date ASC
となります。
私はORDER BY
のCASE
のステートメントなどのサブクエストを試しました。このソートの変更には何が必要ですか?
注:パフォーマンスは素晴らしいですが、ここで最も大きな問題ではありません。また、私は外側のクエリを介してコード+ループを使用してこれを行うことができることを知っていますが、可能であればそのルートに行くのではありません。
SELECT C1に新しい
CASE
文で使用されているソートするために親コメントのIDと親IDを追加する必要がありました*、c1.create_date交流、FROM c1.create_date APを。コメントc1 どこparent_id = 0とc1.profile_id = 582、この部分は何ですか?親コメントか子コメントですか?親コメントをどのように受け取っているのか分かりません。私は考えていた、あなたのような条件があります:コメントは親であることを示すためにcomment.id = 0 ...しかし、あなたのような継ぎ目は、コメントが親であることを示すcomment.parentId = 0を持っていますか? – Sarhang@Sarhangその部分はすべての親を得ます。共用体の下のSELECTは、子コメントを親に結合します。 – KickingLettuce
@kickingLettues、私は間違っていたので私の答えを取り除きました。あなたは自分自身で答えを見つけました。 – Sarhang