Zapytanie działa dobrze dla mnie. Próbowałem uruchomić go z MySQL Query Browser:
CREATE TABLE tbl (Id INT NOT NULL, SortId INT NOT NULL);
INSERT INTO tbl (Id, SortId) VALUES (1, 9), (2, 22), (3, 13);
SET @a:=0;
UPDATE tbl SET [email protected]:[email protected]+1 ORDER BY sortId;
SELECT * From tbl;
Wynik:
Id sortId
1 1
2 3
3 2
pamiętać, że podczas uruchamiania kwerendy z MySQL Query Browser należy wprowadzić jedną kwerendę na linię, a nie dwa na jednej linii, jak robisz . Jeśli chcesz umieścić to w procedurze przechowywanej (dobrym pomysłem) można utworzyć ją tak:
DELIMITER //
CREATE PROCEDURE updateSortIds()
BEGIN
SET @a:=0;
UPDATE tbl SET [email protected]:[email protected]+1 ORDER BY SortId;
END //
DELIMITER ;
A, aby go wykonać, użyj tego:
CALL updateSortIds();
Przechowywane Procs w MySQL są ból do zarządzania i wdrażania. Wymagają one przyznania kontom użytkowników dostępu do tabeli mysql.proc, a tworzenie kopii zapasowych i przywracanie bazy danych nie obejmuje SP. Wsparcie SP w MySQL naprawdę pozostawia wiele do życzenia. –
Wygląda na to, że chcesz zamówić tabelę od 0 do N. Czy istnieje powód, dla którego nie możesz użyć kolumny tożsamości, aby dane zostały zwiększone po wstawieniu? Czy te istniejące dane nie mogą zostać ponownie załadowane? Próbowałem to w SQL Server: aktualizacja tbl ustawić sortId = 0 aktualizacja tbl ustawiony sortId = (select count (*) od tbl gdzie sortId = 0) Miałem nadzieję select by wykonać dla każdego wiersza i schodzić wartości od N - 0, ale zostało wykonane tylko raz. –
Niestety Joshua ma rację, potrzebuję użyć SP dla tego. –