无论如何要改进这个MySQL数据库查询

时间:2017-03-22 21:53:32

标签: php mysql sql mysqli

我正在寻找改进此查询的方法。基本上,我有一张名为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

1 个答案:

答案 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