Vostri criteri funziona bene per me. Ho provato a farlo funzionare da 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;
Risultato:
Id sortId
1 1
2 3
3 2
Si noti che durante l'esecuzione di query di MySQL Query Browser dovrebbe entrare una query per riga, non due su una linea, come si sta facendo . Se si vuole mettere questo in una stored procedure (probabilmente una buona idea) è possibile creare in questo modo:
DELIMITER //
CREATE PROCEDURE updateSortIds()
BEGIN
SET @a:=0;
UPDATE tbl SET [email protected]:[email protected]+1 ORDER BY SortId;
END //
DELIMITER ;
E per eseguirlo, utilizzare questo:
CALL updateSortIds();
fonte
2010-04-02 20:48:25
stored procedure in MySQL sono un dolore da gestire e da implementare. Richiedono l'accesso agli account utente alla tabella mysql.proc e il backup e il ripristino di un DB non includono gli SP. Il supporto SP in MySQL lascia davvero molto a desiderare. –
Sembra che si desideri ordinare la tabella da 0 a N. C'è un motivo per cui non è possibile utilizzare una colonna Identity in modo che i dati vengano incrementati quando inseriti? Oppure questi dati esistenti non possono essere ricaricati? Ho provato questo in SQL Server: aggiornamento tbl impostare SortID = 0 aggiornamento tbl impostare SortID = (select count (*) da tbl dove SortID = 0) Speravo select verrebbe eseguito per ogni riga e scendono i valori da N - 0 ma sono stati eseguiti solo una volta. –
Sfortunatamente Joshua è corretto, ho bisogno di usare un SP per questo. –