Autor Zpráva
chaos
Profil *
Nekamenujte mě, ale chci se zeptat na dotaz, který měl asi každý, kdo s mysql začínal. Zatím jsem nikde nenašel uspokojivou odpověď a moje pokusy končily chybou.

Jde o to, že potřebuju, aby hodnoty tabulky byly seřazeny podle ID od 1 až po max.

Jak toto ID naplňovat? - nejdřív jsem to dělal pomocí cyklu for. Pak jsem se dočetl o deklaraci ID INTEGER AUTO_INCREMENT, a čekal, že nyní se ID naplní samo. A ono ne...místo toho mi to všechny položky vyplnilo na NULL.

Jak ID udržovat - pokud smažu řádek tabulky, tak aby se všechny vyšší hodnoty zmenšily o 1.

Vím jak bych tohle všechno vyřešil v PHP přes cykly, ale ptám se, jestli na to nemá databáze nějaké vestavěné elegantní řešení.

Pokud je tento dotaz z kategorie těch ... tak mi prosím alespoň hoďte link, kde se tohle řeší. Několik odkazů jsem už četl, ale žádný mi nepomoh

Pokud jde o tenhle návod, tak tomu nevím ani hlavu, ani patu
set @radek=0
select @radek:=@radek+1 rownum, t.* from tabulka t

Nebo s použitím vnořeného dotazu (4.1+)...

select @radek:=@radek+1 rownum, t.* from (select @radek:=0) r, tabulka t
jaco
Profil
Pre dobro tabuľky je prakticky zbytočné ID udržovať, ja sa spolieham čisto na auto_increment.
chaos
Profil *
ok, ale ja nevím, jak k tomu auto%incrementu přistoupím
chaos
Profil *
abych to upřesnil

nastavil jsem
mysql_query ("create table prvni ( ID INTEGER AUTO_INCREMENT, NAZEV varchar(80))");

a od té doby mi tenhle příkaz

$pocet = mysql_result(mysql_query("SELECT COUNT(ID) FROM prvni"), 0);

hazí chybu

mysql_result(): supplied argument is not a valid MySQL result resource in C:\Program Files\EasyPHP\www\MySQL\index.php on line 18
jaco
Profil
No poľu ID nastavíš auto_increment, a potom, vždy keď vkladáš riadok a neuvedieš ID, nastaví sa automaticky o jedna väčší, ako pri poslednom vkladanom.
Samozrejme, keď vymažeš riadok v strede tabuľky, tak sa ostatné ID nemenia, proste máš v nich "dieru". Ale to databáze nevadí, a ak to nevadí ani tvojej aplikácii, tak to nechaj tak.
Kajman_
Profil *
ID musí být primární klíč, aby se auto_increment použil.
chaos
Profil *
OK, to funguje. Zbývá vyřešit poslední problém. Po odebrání hodnoty přečíslovat ostatní řádky. To autoincrement neudělá. Mám to tedy udělat cyklem?
Kajman_
Profil *
Nedělá se to.

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: