1
SELECT *, IFNULL(parent, id) AS p, IFNULL(reply_comment_id, id) AS r
FROM article_comments ORDER BY p ASC, r ASC, date DESC

ここに画像の説明を入力

LIMITを使いたい。さらに行がある場合は、クエリを「p」で制限したいと思います。画像: ("p": 1, 1, 1, 1, 1) – これは 1 つです ("p": 2, 2, 2, 2, 2, 2, 2) – これは 2 つです...

たとえば、次のようにします。LIMIT 1 を使用する場合は、("p": 1, 1, 1, 1, 1) のみを表示します。ここに画像の説明を入力

4

1 に答える 1

0

使用するクエリは次のとおりです。

SELECT * FROM
FROM article_comments
WHERE id = 1 OR parent = 1
ORDER BY parent ASC, reply_comment_id ASC, `date` DESC

ここでは、計算列は必要ないことに注意してください。親と reply_comment_id で昇順で並べ替えると、NULL 値が最初に並べ替えられます。

親、reply_comment_id、および日付フィールドにインデックスがあることを確認してください(主キーであると想定するidに加えて)

また、UNIX タイムスタンプではなく、日付列に日時フィールドを使用することを検討することもできます。データベース内のデータを表示するとき、および日付範囲をクエリしようとするときは、非常にユーザーフレンドリーです/したがって、次のようにフィルターを記述できます。

WHERE `date` BETWEEN '2012-01-01 00:00:00' AND '2012-12-31 23:59:59'

タイムスタンプの変換が必要になる代わりに。

于 2012-09-26T21:27:56.593 に答える