sql >> Databáze >  >> RDS >> Mysql

Jaký je nejúčinnější způsob uložení pořadí řazení ve skupině záznamů v databázi?

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.)



  1. Jak extrahovat číslo týdne v sql

  2. Operátor Oracle (+).

  3. Ruby:mysql2-Gem nefunguje (Mac OS X Snow Leopard, Ruby 1.9.2)

  4. Jak uložit unicode v MySQL?