Skip to content

Instantly share code, notes, and snippets.

@HallM
Created January 25, 2016 17:27
Show Gist options
  • Save HallM/acff800093b96c03e0b3 to your computer and use it in GitHub Desktop.
Save HallM/acff800093b96c03e0b3 to your computer and use it in GitHub Desktop.
SQL to be able to have a sorting column with category
; removal
UPDATE page
, (SELECT category_id as oldcategory, page_order as oldorder FROM page WHERE id = :pgid) as t2
SET page.page_order = CASE
WHEN id = :pgid THEN -1
WHEN page.category_id = t2.oldcategory
AND page.page_order > t2.oldorder
THEN page.page_order-1
ELSE page.page_order
END
WHERE page.category_id = t2.oldcategory AND page.page_order >= t2.oldorder;
; moving
UPDATE page
, (SELECT category_id as oldcategory, page_order as oldorder FROM page WHERE id = :pgid) as t2
SET page.page_order = CASE
WHEN id = :pgid THEN :neworder
WHEN page.category_id = t2.oldcategory
AND page.page_order > t2.oldorder
AND (t2.oldcategory != :newcategory OR page.page_order <= :neworder)
THEN page.page_order-1
WHEN page.category_id = :newcategory
AND page.page_order >= :neworder
AND (t2.oldcategory != :newcategory OR page.page_order < t2.oldorder)
THEN page.page_order+1
ELSE page.page_order
END
, page.category_id = CASE
WHEN id = :pgid THEN :newcategory
ELSE page.category_id
END
WHERE (t2.oldcategory = :newcategory
AND page.category_id = :newcategory
AND page.page_order >= LEAST(:neworder, t2.oldorder)
AND page.page_order <= GREATEST(:neworder, t2.oldorder))
OR (t2.oldcategory != :newcategory
AND ((page.category_id = t2.oldcategory AND page.page_order >= t2.oldorder)
OR (page.category_id = :newcategory AND page.page_order >= :neworder)));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment