alt text http://i.imagehost.org/0911/kaip_padaryti_valdymas_copy.png如何更新存儲在mysql表中的行的順序?
我想更新的順序,以便GALLERY
去PRODUCTS
之前。
該做什麼查詢?
對不起,我的英文。
alt text http://i.imagehost.org/0911/kaip_padaryti_valdymas_copy.png如何更新存儲在mysql表中的行的順序?
我想更新的順序,以便GALLERY
去PRODUCTS
之前。
該做什麼查詢?
對不起,我的英文。
假設請求發送的order
當前值和用戶點擊了該行的動作類型(上行/下行)。對於你的例子,它會像script.php?oid = 2 & action = up。 然後,你可以簡單地爲了= $ OID和順序調換有秩序= $ OID和秩序= $ OID-1行動=向上行的值和行數=行動$ OID + 1 =「向下」。
E.g.
UPDATE
foo as f1, foo as f2
SET
f1.`order`=1,
f2.`order`=2
WHERE
f1.`order`=2
AND f2.`order`=1
使用鏈表:保持parent_id
,而不是爲了領域:
id name parent_id
1 products 0
2 gallery 1
3 contacts 2
SELECT mo.*
FROM (
SELECT @r AS _parent,
@r :=
(
SELECT id
FROM mytable
WHERE parent = _parent
) AS _id,
@order := @order + 1 AS _order
FROM (
SELECT @order := 0
) vars,
mytable
) q
JOIN mytable mo
ON mo.id = q._id
ORDER BY
_order
這樣,您就可以輕鬆地與最3
更新要將任何項目(或項目甚至連續塊)。
看到這篇文章在我的博客上如何實現和查詢該型號:
你需要不止一個查詢。例如:
SELECT order FROM table WHERE id=X
UPDATE table SET order=order+1 WHERE order=Y
UPDATE table SET order=order-1 WHERE id=X
X是單擊「up」的元素的ID。 Y是第一個SELECT
查詢的結果。
我想補充一點,你顯然不應該,如果運行更新查詢,元素是列表的第一個或最後一個元素... – Franz 2009-12-29 19:10:45
假設ID是主鍵或唯一鍵...
INSERT INTO yourtable (id, order)
VALUES (1,2), (2,1)
ON DUPLICATE KEY UPDATE
order=VALUES(order);
如果表是短暫的,然後如果你把(ID,訂單)對在VALUES
應用程序邏輯可能會更簡單所有錶行的子句 - 這樣你就不需要測試以查看改變了什麼。
我假設按鈕包含要移動的條目(button_id)
的ID,以移動條目時,首先由1移的當前項上面的項下:
UPDATE foo
SET order = order-1
WHERE order = ((SELECT order FROM foo WHERE id = "button_id") + 1)
然後移動當前條目高達1:
UPDATE foo
SET order = order+1
WHERE id = "button_id"
OR 要ORD向下移動一個條目呃,首先由1移的當前進入了下面的條目:
UPDATE foo
SET order = order+1
WHERE order = ((SELECT order FROM foo WHERE id = "button_id") - 1)
然後向下1移動當前條目:
UPDATE foo
SET order = order-1
WHERE id = "button_id"
雖然你不能相信'訂單',可以嗎? – Franz 2009-12-29 19:11:25
如果'訂單'是唯一的,爲什麼不呢? (爲什麼它不應該是唯一的?)併發將是另一個問題。 (編輯:但我承認我沒有嘗試/測試它,可能是一個更好的解決方案;-)) – VolkerK 2009-12-29 19:12:30