2017-03-22 5 views
1

Ich suche sowieso nach dieser Abfrage zu verbessern. Im Grunde habe ich eine Tabelle mit dem Namen tool_categories. Diese Tabelle enthält nur zwei Spalten: categoryID das ist ein Primärschlüssel und einzigartig; und dann categoryName, die auch einzigartig ist. Die folgende Abfrage dient dazu, die Reihenfolge dieser Kategorien in einem Formular der Administratorseite zu ändern. Ich rufe SELECT * FROM tool_categories ORDER BY categoryID an, um diese richtig in ein <select> Dropdown zu sortieren. Ich weiß, dass es eine Möglichkeit geben muss, die unten stehende Abfrage zu optimieren und vielleicht einige dieser Zeilen komplett zu entfernen.Wie auch immer, um diese MySQL-Datenbankabfrage zu verbessern

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 

Antwort

0

Ja, verwenden Sie keinen Primärschlüssel für die Bestellung. Ich würde eine neue Spalte hinzufügen, display_order, die ein int sein kann.

Dann müssen Sie nicht entfernen & den Index und den Primärschlüssel neu hinzufügen. Sie müssen dann auch die andere Tabelle nicht aktualisieren, da sich der Join-Schlüssel nicht mit der Reihenfolge ändert.

# move everything below where the item was up to close the gap 
update tool_categories set display_order = display_order - 1 where display_order > <old position>; 

# move everything down to make room at the top 
update tool_categories set display_order = display_order + 1; 

# move the specific item to the top 
update tool_categories set display_order = 0 where category_id = ?; 
:

Dann einen tool_category an die Spitze der Liste bewegen kann wie so getan werden,

Verwandte Themen