私は二重注文が必要な状況を抱えています。 私はそれを説明しようとします(簡単にするために、不要な列を削除しました)。mysqlは2つの異なる部分に分けて注文します。
(CURRENTDATE = 2017年7月31日)
私はテーブルには、今トリッキーな部分が来るので
user_id | username | user_changed
---------------------------------
1 | John Doe | 2017-07-31 12:22:58 (less then 48 hours)
2 | Test name| 2017-07-30 09:17:18 (less the 48 hours)
4 | itRocks2 | 2017-07-28 07:45:52 (greater then 48 hours)
3 | itRocks | 2017-07-29 07:45:52 (greater then 48 hours)
ようユーザーと呼ばれてきました。私は2つの異なる部分
に注文する必要がありパート1: 最初の部分は user_changedは48 時間前に以下ですuser_changedによってランダムな順序である必要があります。
パート2: ニーズが
だから、当社のデータベースからのサンプルデータと、これは結果
あるべきuser_changedがuser_changed ASC順で48時間、次に大きい残りのユーザを注文します1 |ジョン・ドゥー| 2017-07-31 12:22:58
2 |テスト名| 2017年7月30日9時17分18秒
これら二つのニーズランダムな順序彼らは48時間 他のすべてのユーザー(48時間以上)、次に小さいのでuser_changed ASCによって順序を必要とするので、
のような3 | itRocks | 2017-07-29 07:45:52(例52時間)
4 | itRocks2 | 2017-07-28 07:45:52(例60時間)
また、後で自分のビューでユーザーをグループ化するには、user_idによるデフォルトの注文が必要です。だから私が試したいくつかのクエリ:
クエリ1
SELECT *, if(user_changed >= SUBDATE(NOW(), INTERVAL 48 HOUR), RAND(), 0) AS rndOrder
FROM users
ORDER BY user_id, rndOrder ASC
クエリ2
SELECT *, if(user_changed >= SUBDATE(NOW(), INTERVAL 48 HOUR), "true", "false") AS rndOrder
FROM users
ORDER BY user_id ASC,
CASE
WHEN rndOrder = 1 THEN user_changed RAND()
WHEN frndOrder = 0 THEN user_changed ASC
END;
私はあなたのクエリ@Cwallenpooleを試しましたが、上記のようには表示されません。最初に、その後、私たちは48私たち。それから48時間以上残っている残りのすべては、昇順でソートされています。 – Bham
@Bham私は '<' and a '>'を切り替えました。 – cwallenpoole