我有一個食品項目表。他們有一個「職位」字段,表示他們應該在列表中顯示的順序(listID是他們所在的列表,我們不想重新排列另一個列表中的項目)。基於單個記錄更改的SQL對多個記錄進行更改使用SQL
+--id--+--listID--+---name---+--position--+
| 1 | 1 | cheese | 0 |
| 2 | 1 | chips | 1 |
| 3 | 1 | bacon | 2 |
| 4 | 1 | apples | 3 |
| 5 | 1 | pears | 4 |
| 6 | 1 | pie | 5 |
| 7 | 2 | carrots | 0 |
| 8,9+ | 3,4+ | ... | ... |
+------+----------+----------+------------+
我希望能夠說「芯片之前將梨」,這包括設置梨的位置位置1,然後遞增1。其間的所有立場,使我得到的表看起來像這樣...
+--id--+--listID--+---name---+--position--+
| 1 | 1 | cheese | 0 |
| 2 | 1 | chips | 2 |
| 3 | 1 | bacon | 3 |
| 4 | 1 | apples | 4 |
| 5 | 1 | pears | 1 |
| 6 | 1 | pie | 5 |
| 7 | 2 | carrots | 0 |
| 8,9+ | 3,4+ | ... | ... |
+------+----------+----------+------------+
讓所有我需要做的是SELECT name FROM mytable WHERE listID = 1 ORDER BY position
,我會得到我的所有食品按照正確的順序。
是否可以用單個查詢來做到這一點?請記住,記錄可能在列表中向上或向下移動,並且該表包含多個列表的記錄,所以我們需要隔離listID。
我對SQL的知識相當有限,所以現在我知道要做到這一點的唯一方法是SELECT id, position FROM mytable WHERE listID = 1 AND position BETWEEN 1 AND 5
,然後我可以使用Javascript(node.js)將位置5更改爲1,並將所有其他+1加1。然後更新我剛更改的所有記錄。
這只是我每次試圖閱讀SQL的東西,每個人都會說避免多個查詢,並避免做syncronous編碼和類似的東西。
謝謝
你想要什麼結果.. –
@reds讓我的表看起來像從我的問題,第二個例子,當我想之前移動「梨」 「芯片」 –
你想讓梨成爲你的第二排記錄?你是這個意思嗎? –