Skip to content

Instantly share code, notes, and snippets.

@HallM
Created January 20, 2016 23:46
Show Gist options
  • Save HallM/fd2886dec2140f610040 to your computer and use it in GitHub Desktop.
Save HallM/fd2886dec2140f610040 to your computer and use it in GitHub Desktop.
Can update the order of a page and all pages in between old and new order indices safely
UPDATE page, (SELECT pageorder as oldorder FROM page WHERE id = :pgid) as t2 SET page.pageorder = CASE
WHEN id = :pgid THEN :neworder
WHEN page.pageorder <= :neworder AND page.pageorder > t2.oldorder THEN page.pageorder-1
WHEN page.pageorder >= :neworder AND page.pageorder < t2.oldorder THEN page.pageorder+1
ELSE page.pageorder
END
WHERE page.pageorder >= LEAST(:neworder, t2.oldorder) AND page.pageorder <= GREATEST(:neworder, t2.oldorder);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment