Autor Zpráva
Školník
Profil
Po delší odmlce jdu zase žadonit o radu. Nenapadlo mě, pod jakou frází hledat, proto tu otázku položím.

Ukládám do databáze hodnoty ID a třeba NAZEV. ID je auto_increment. Představte si, že v databázi je už třeba 20 řádků s ID od 1 do 20. A rozhodnu se 10. řádek smazat. Chtěl bych, aby se desátý smazal a jednotlivé zápisy nad devítkou se posunuly o číslo níž. Tj. v databázi by bylo 19 řádků s ID od 1 do 19. Ne 1-9 a 11-20.

Nu a jak na to.. Díky :-)
Školník
Profil
Ten název je trochu zavádějící, omlouvám se..
tiso
Profil
...takéto veci sa s primárnym kľúčom nerobia, vytvor si stĺpec poradie a hraj sa s ním...
Školník
Profil
Dobrá tak tam je ještě sloupec PORADI, ktery je stejny jako ID, jen neni primary key...:)

//stejný jako ID je do doby, než se s tím samozřejmě začne hejbat :-)
tiso
Profil
1. vyber si hodnotu poradia pre id ktore chces zmazat: SELECT poradi FROM tabulka WHERE id=10
2. uloz si ju do premennej (napriklad $poradi)
3. zmaz si riadok DELETE FROM tabulka WHERE id=10
4. zmensi poradie nasledujucim UPDATE tabulka SET poradi=poradi-1 WHERE poradi>$poradi
Leo
Profil
"1. vyber si hodnotu poradia pre id ktore chces zmazat: SELECT poradi FROM tabulka WHERE id=10
2. uloz si ju do premennej (napriklad $poradi)
3. zmaz si riadok DELETE FROM tabulka WHERE id=10
4. zmensi poradie nasledujucim UPDATE tabulka SET poradi=poradi-1 WHERE poradi>$poradi"

Fajn, a co kdyz vam nekdo mezi body 2 a 3, nebo 4, zmeni obsah tabulky? Musite tabulku bud zamknout, nebo pouzit transakce, nebo ten UPDATE prepsat. Leo
25k
Profil *
Velice snadne reseni ....

smazni sloupec ID a znovu ho vytvor opet s autoincrementem ... jako kdyz si zakladal tabulku, cisla se precisluji sama.
tiso
Profil
Leo - viem, toto nie je konečné riešenie...
Školník
Profil
25k :-D

edit: omlouvám se, měl jsem vtipnou náladu, asi jsem jedl hodně kaše..:-)
roberta
Profil
Školník
Dobrá tak tam je ještě sloupec PORADI, ktery je stejny jako ID, jen neni primary key...:)

primary key nemá nič spoločné s poradím. poradie musí zadať ten, kto vyplňuje údaje do tej tabuľky. poradie potom môže zadávať ručne, alebo mu treba vytvoriť prostredie, aby to poradie nemusel písať ručne. napr. dosť často sa to robí tak, že sa vypíše zoznam záznamov na obrazovku, vedľa zoznamu sa dajú tlačítka (hore/dole) a po označení záznamu a stlačení príslušného tlačítka sa záznam presunie hore/dole a v databáze potom iba meníš stĺpec PORADIE
25k
Profil *
Skolnik nevim cemu se jako smejes ... vyzkousel si to?
koudi
Profil
25k
Skolnik nevim cemu se jako smejes ... vyzkousel si to?

Fungovat to samozřejmě bude, ale je to opravdu vhodné řešení? Vždycky, když vymažu řádek z databáze měnit strukturu tabulky je podle silně nevhodné.
25k
Profil *


$counter=mysql_query("SET @counter:=0");
$sql = mysql_query(
"UPDATE tabulka SET poradi = @counter:=@counter +1
ORDER BY ID ASC
" );

tiso
Profil
koudi - o vhodnosti toho čo chce by sa tiež dalo polemizovať...
Školník - ešte jedno riešenie - vôbec tam to poradie nedávaj, o id sa nesteraj a čísluj si riadky v PHP
roberta
Profil
tiso
ešte jedno riešenie - vôbec tam to poradie nedávaj, o id sa nesteraj a čísluj si riadky v PHP

len akurát, ako zabezpečíš, aby sa vypisovali tie záznamy v správnom poradí
tiso
Profil
roberta ORDER BY ID
koudi
Profil
tiso
- o vhodnosti toho čo chce by sa tiež dalo polemizovať...

To ano, je to poměrně blbý nápad. Ale vždycky je lepší i blbý nápad implementovat dobře. Nejhorší je blbý nápad s příšernou impelentací :)
roberta
Profil
tiso
ORDER BY ID
takže, keď insertnem 100 záznamov (id sú zatiaľ, čo sa týka poradia v poriadku). potom pridám ďalší záznam (ten bude mať id 101), ale chcem, aby sa zobrazoval na 53-ťom mieste, myslíš, že mi to vyrieši ORDER BY ID?

EDIT-> tiso, prepáč, to tvoje 2 riešenie je dobré. zle som si prečítal pôvodnú otázku
Školník
Profil
Díky kluci, já potřebuji nejen, když vymažu jeden řádek srovnat číslování, ale jak tu někdo psal i posouvat jednotlivé příspěvky výše / níže. Už jsem to zhruba vyřešil, děkuju Ti tiso za nakopnutí a Leovi za další připomínky..:-)
one_k
Profil
Školník
A k cemu muze byt dobre toto?

id je neco jako rodne cislo.
predstavte si ze by se rodna cisla menila pokazde kdyz nekdo umre..

vsak pokud zmenis id, tak je vse v pr.. Teda je pravda, ze nevim jak databazi vyuzivate..
Školník
Profil
one_k Snad si rozumíme, požadavek jsem napsal na začátku špatně. ID se nemění, mění se PORADI
one_k
Profil
Školník
aha - to jsem prehledl.
Toto téma je uzamčeno. Odpověď nelze zaslat.