Autor Zpráva
peter_r
Profil
Asi je to primitívna záležitosť, ale nemôžem ohľadom toho nič nájsť.

Mám v db prvý stĺpec id, ktorý má nastavené auto_increment a je primárny, čiže automaticky čísluje položky. Ale samozrejme keď vymažem napr. posledný riadok, ďalšie číslo pridá ďalšie v poradí, nepridá to čo som posledné vymazal. Je to nejako možné nastaviť?

Rozumiem a nechcem doplňovať riadky niekde medzi, že narp. mám 50 riadkov a vymažem nejaký 35-ty a ten chcem doplniť.

Dúfam že som to napísal zrozumiteľne a ďakujem za každú radu.
Firibix
Profil
Reakce na petera_r:
Viz Recyklování primárních klíčů smazaných záznamů a Číslování řádků přímo v mysql ve zdejším FAQ.
peter_r
Profil
Firibix:
ďakujem, o tomto som nevedel, ale ...

skúsil som hneď prvú možnosť a nestalo sa nič:

set @radek=0

a neviem, či @radek mám dať názov stĺpca? skúšal som hocičo a číslovanie sa nezmenilo
Andrej.B
Profil
peter_r:

nevymazavajte riadky, len vytvorte stlpec napriklad s nazvom "aktivny" , ktory bude false or true a podla toho vyber cez podmienku WHERE len tie co su aktivne nastavene na TRUE
Firibix
Profil
Reakce na petera_r:
@radek mám dať názov stĺpca
MySQL podporuje proměnné, proměnná se uvozuje zavináčem. @radek tedy značí proměnnou s názvem radek.

skúsil som hneď prvú možnosť a nestalo sa nič
Samotné SET @radek=0 jen nastaví proměnnou radek na nulu, nic jiného nedělá. Je potřeba jí pak použít ve tvém dotazu, podle příkladu ve FAQ:

SELECT @radek:=@radek+1 cislo_radku, tabulka.* FROM tabulka

Dotaz výše vybere všechny řádky z tabulky tabulka (část FROM tabulka), všechny sloupce z tabulky tabulka (část tabulka.*) a sloupec, ve kterém bude hodnota proměnné radek (část SELECT @radek), s tím, že na každém řádku se proměnná radek zvýší o jedna (část @radek:=@radek+1).

Reakce na Andreje.B:
nevymazavajte riadky
Ne vždy je to možné. Například osobní data se smí uchovávat jen přiměřeně dlouhou dobu, což tlačítko Smazat, které data jen skryje a v databázi je nechá na věky věků, nesplňuje.


Reakce na petera_r:
Respektive spíš se zeptám: K čemu to potřebuješ? Pokud chceš mít jen řádky očíslované na výpise do stránky, pravděpodobně bude jednodušší to udělat v PHP nebo jiném programovacím jazyku, který používáš.
peter_r
Profil
Andrej.b: ... rozumiem

Firibix: možno je to blbosť ale, pripravujem si jednu databázu, kde samozrejme testujem a pridávam riadky, ktoré chcem pred ostrým spustením vymazať a začať naostro od nuly

Asi sa to dá tak že vytvorím novú databázu s novým názvom ale potom musím všade kde som použil názov databázy urobiť zmenu názvu
Kcko
Profil
Řešíš kardinální blbost. ID řádku má odkazovat na řádek a když ho smažeš už po něm tu mezeru zapľnovat nemáš.
Firibix
Profil
Reakce na petera_r:
Jméno databáze má být uvedené v celé aplikaci na jednom místě, v nějakém konfiguračním souboru. Jinak je to špatně.

Pokud ti jde jen o jednorázové promazání tabulky a reset indexu, můžeš použít (smaže z tabulky všechny řádky!):

TRUNCATE TABLE tabulka;
ALTER TABLE tabulka AUTO_INCREMENT = 1;
Andrej.B
Profil
Firibix:
Reakce na Andreje.B:
„nevymazavajte riadky“
Ne vždy je to možné. Například osobní data se smí uchovávat jen přiměřeně dlouhou dobu, což tlačítko Smazat, které data jen skryje a v databázi je nechá na věky věků, nesplňuje.

Tak toto ma nenapadlo, potom staci pridat este stlpec s datumom a nejakym scriptom na pozadi /kazdy den zmaz data kde datum je < 365 dni napr./ vymazavat data v riadkoch, kde su osobne data, nie cele riadky.
N71
Profil *
Firibix:
ALTER TABLE tabulka AUTO_INCREMENT = 1;

Tento řádek je nadbytečný. V MySQL TRUNCATE resetuje sekvenci standardně.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0