Co takhle použít integer
sloupec, který definuje pořadí? Ve výchozím nastavení přiřadíte čísla * 1000, jako 1000, 2000, 3000.... a pokud přesunete 3000 mezi 1000 a 2000, změníte to na 1500. Takže ve většině případů nemusíte ostatní čísla aktualizovat vůbec. Tento přístup používám a funguje dobře. Můžete také použít double
ale pak nemáte kontrolu nad přesností a zaokrouhlovacími chybami, takže to raději nepoužívejte.
Algoritmus by tedy vypadal takto :řekněme, že přesunete B na pozici za A. Nejprve proveďte výběr, abyste viděli pořadí záznamu vedle A. Pokud je alespoň +2 vyšší než pořadí A, pak stačí nastavit pořadí B tak, aby se mezi to vešlo. Ale pokud je to jen +1 vyšší (za A není žádná mezera), vyberete hraniční záznamy B, abyste viděli, kolik místa je na této straně, vydělte 2 a pak přidejte tuto hodnotu k pořadí všech záznamů mezi A a B. To je ono!
(Všimněte si, že byste měli použít transakci/uzamykání pro jakýkoli algoritmus, který obsahuje více než jeden dotaz, takže to platí i pro tento případ. Nejjednodušší způsob je použít transakci InnoDB.)