私はテーブル「取引」を持っています
+---------+---------+
| deal_id | expired |
+---------+---------+
| 1 | 0 |
| 2 | 0 |
| 3 | 0 |
| 4 | 0 |
| 5 | 1 |
| 6 | 0 |
| 7 | 1 |
| 8 | 1 |
| 9 | 0 |
| 10 | 0 |
+---------+---------+
次の注文をアーカイブしたいと思います。
1) 最下部にある期限切れの取引
2) deal_id の順に並べた、deal_id が 5 より大きい取引
3) シードを使用して RAND によって順序付けられた下部の id が小さい/等しい 5 を処理します。
SELECT deal_id、期限切れ FROM Deal ORDER by expired = 1、deal_id < 5、rand(1) desc
テーブルの上部も rand で並べ替えられ、上部は deal_id desc で並べ替えたいため、このクエリは間違っています。
これは、次のようになります。
+---------+---------+
| deal_id | expired |
+---------+---------+
| 10| 0 | top part ordered by
| 9 | 0 | deal_id desc
| 6 |_______0 | if ( deal_id < 5 AND expired = 0 )
| 4 | 0 |
| 1 | 0 | bottom part ordered
| 5 | 0 | by rand(seed)
| 7 | 0 | expired = 1 at the bottom
| 5 | 1 |
| 7 | 1 |
| 8 | 1 |
+---------+---------+
「ORDER BY」で式だけを使用してそれをアーカイブすることは可能ですか? UNION を使用できることはわかっていますが、実際には使用したくありません。フレームワークで物事を単純に保つことができます。
ありがとう。