我正在寻找改进此查询的方法。基本上,我有一张名为tool_categories
的表格。此表仅包含两列:categoryID
,它是主键且唯一;然后categoryName
也是唯一的。下面的查询用于从管理页面表单编辑这些类别的顺序。我致电SELECT * FROM tool_categories ORDER BY categoryID
将这些正确排序为<select>
下拉列表。我知道必须有一种方法来优化下面的查询,或许完全摆脱其中的几条线?
UPDATE tool_categories SET categoryID = 0 WHERE categoryID = ?
UPDATE tool_categories SET categoryID = categoryID - 1 WHERE categoryID > ?
UPDATE tools SET categoryID = categoryID - 1 WHERE categoryID > ?
ALTER TABLE tool_categories DROP INDEX categoryID
ALTER TABLE tool_categories DROP PRIMARY KEY
UPDATE tool_categories SET categoryID = categoryID + 1 WHERE categoryID >= ?
UPDATE tools SET categoryID = categoryID + 1 WHERE categoryID >= ?
ALTER TABLE tool_categories ADD INDEX categoryID (categoryID)
ALTER TABLE tool_categories ADD PRIMARY KEY (categoryID)
UPDATE tool_categories SET categoryID = ? , categoryName = ? WHERE categoryID = 0
答案 0 :(得分:0)
是的,不要使用主键进行订购。我会添加一个新列SELECT *
FROM my_user u
WHERE ID IN (
SELECT MIN(ID)
FROM my_user
WHERE user_key = u.user_key
)
,它可以是一个int。
然后你不必删除&amp;重新添加索引和主键。您也不必更新另一个表,因为连接键不会随订单而变化。
然后,将tool_category移动到列表顶部可以这样做:
display_order