Poradie položiek v DB rubrika: Databáze: SQL
Zdravím,
predpokladajme, že máme nasledujúci zoznam projektov:
Project A
Project C
Project D
Project B
Užívateľ má možnosť (klasicky pomocou drag & drop) meniť poradie týchto položiek. RIešenie, ktoré je teda zjavné, je pridať povedzme stlpec order_index, ktoré by bolo číslo reprezentujúce poradie. Mohlo by to teda vypadať takto:
Project A (1)
Project C (2)
Project D (3)
Project B (4)
// číslo v zátvorke je práve onen order_index
Povedzme však, že by sme chceli položku B presunúť pred položku C. Tým pádom by sa zmenil orderindex Céčka a Déčka, bolo by nutné ho inkrementovať o jedno, čo mi príde celkom nepraktické, pokiaľ by sme mali stovky záznamov.
Ako riešite tento problém vy? Mňa už totižto žiadne riešenie nenapadá. Ďakujem.
UPDATE project SET order_index=CASE WHEN order_index=4 THEN 2 ELSE order_index+1 END WHERE order_index>=2 AND order_index<=4;
EDIT: Uživatelé MySQL mohou použít i kratší variantu:
UPDATE project SET order_index=IF(order_index=4, 2, order_index+1) WHERE order_index>=2 AND order_index<=4;
Komentáře
- podhy : + za CASE - za IF :-) Nicméně pokud je to únosné, tak osobně dávám radši přednost svému řešení, které je trošičku čitelnější (na první pohled) — 3.2.2016
- Kit : @podhy: Co je na IF špatně? Zkoušel jsem obojí a obojí mi funguje. To IF jsem přidal, protože je kratší. — 3.2.2016
- podhy : IF je proprietální rozšíření. CASE dělá stejnou službu (dokonce lepší) a funguje všude — 3.2.2016
- Kit : Tak to jo. Předpokládal jsem, že dotaz je nasměrován na MySQL a proto jsem jiné DB neřešil. — 3.2.2016
- podhy : No vzhledem k tomu, že se tady v diskuzích chytáš za každé slovíčko, tak autor v původním dotazu nic o MySQL nepsal a kategorie dotazu je "Databáze: SQL" :-) — 3.2.2016
- Kit : Trochu jsem upravil komentář ke druhému řešení. Je to už OK? — 3.2.2016
- podhy : Máš tam + :-) — 3.2.2016
Pro zobrazení všech 9 odpovědí se prosím přihlaste:
Nebo se přihlaste jménem a heslem:
Komentáře