の正または負の整数に基づいてテーブルを注文します。MySQLの:私は<strong>MySQLの</strong>テーブルに列<strong><code>my_order</code></strong>と<strong><code>alt_order</code></strong>で<strong><code>example</code></strong>と呼ばれている列
は、ここで私が達成しようとしているものです:nullの
alt_order
場合は、my_order
によって順番。alt_order
がヌルでない場合は、my_order
で注文しますが、alt_order
の整数に基づいて上または下の行を配置します。
擬似コード:
SELECT * FROM `example`
ORDER BY
IF(`alt_order` IS NULL, `my_order`, [MOVE UP OR DOWN BASED ON `alt_order`])
理想的な出力:
+--------+----------+-----------+-------------------------------------+
| desc | my_order | alt_order | notes |
+--------+----------+-----------+-------------------------------------+
| Item 1 | 1 | NULL | Ordered by `my_order` |
| Item 3 | 122 | -1 | Ordered by `my_order` + `alt_order` | <-- Move up one row
| Item 2 | 50 | NULL | Ordered by `my_order` |
| Item 4 | 127 | NULL | Ordered by `my_order` |
| Item 5 | 205 | NULL | Ordered by `my_order` |
+--------+----------+-----------+-------------------------------------+
試み:
SELECT * FROM `example`
ORDER BY
IF(`alt_order` IS NULL, `my_order`, `my_order` + `alt_order`)
# The problem with using this method is that the value of `my_order`
# has to be the same as the value of above it to work.
何か助けや助言をいただければ幸いです。ありがとうございました。
編集:
alt_order
が正Nであれば、それはN行を下に移動する必要があります。一方、alt_order
場合、それは、N行を上に移動する必要があり、N負です。
*アイテム2 *が* alt_order = + 1 *の場合、あなたはどうしますか? –
@PaulSpiegel 'alt_order'が正の** n **の場合、** n **行下に移動する必要があります。一方、 'alt_order'が負の** n **の場合、** n **行上に移動する必要があります。 –
私はあなたの意見を忘れてしまったと思います。 * Item2:alt_order = + 1 * => * rowNr 3 *に移動し、* Item3 *は* rowNr 2 *を取得します。今* Item3 *は* alt_order = -1 *を持ちます。 * rowNr 1 *に移動しますか?要件が不完全になるケースは他にもたくさんあります。別の例:* Item2:alt_order = + 1 *と* Item3:alt_order = + 1 * - それらを2回スワップしますか? –