Autor Zpráva
tommyH
Profil *
Dobrý den, mám v MySQL databázi tablulku očíslovanou sloupcem ID (je to index). A potřeboval bych přehodit dva táznamy mezi sebou. Ale v té tabulce také vznikají díry v číslování. Tak jestli to nějak jde.. Jinak bych musel řešit přečíslování při každém deletu. Díky
Joker
Profil
tommyH:
K tomuhle tématu viz FAQ.
tommyH
Profil *
Ano to sem četl.. ale já potřebuji přehodit dva záznamy třeba s po sobě nejdoucími ID (ale za sebou). Mohl by to někdo aspoň nastínit jak na to ?
TomášK
Profil
tommyH:
Zkuste přečíst ještě jednou, konrkétně
Nepoužívejte ID jako pořadí záznamu. Udělejte na to zvláštní sloupec, ale většinou to ani není nutné, stačí jen seřadit podle nějakého už existujícího sloupce
Díry v číslování jsou v pořádku, na id (a jeho pořadí) by nemělo záležet. Pokud tohle dodržíte, pak nemá dotaz nemá dobrý smysl.
tommyH
Profil *
No prostě mám v tabulce např. rubriky jeden sloupec je název jeden obsah a jeden ID. S ID nebudu nic dělat viz. FAQ. Ale potřebuji je nějak řadit - takže přidám sloupec pořadí tomu nastavím AUTO-INCREMENT. Ale při mazání tam bude stejný problém a to jsou díry. Potřebuji se jich puď zbavit NEBO nějak přehazovat posobě jdoucí údaje (ale ne s vždy po sobě jdoucím pořadím kvůli děrám). A právě s temito dvěma věci si noc nevím rady.. Doufám že mě chápete.
panther
Profil
tommyH:
takže přidám sloupec pořadí tomu nastavím AUTO-INCREMENT.
přidáš sloupec pořadí, ne však auto increment (to by pak bylo zbytečné, AI je už ID). Při prohození 2 záznamů jednomu pozici o jedničku snížíš, druhému zvýšíš.

Při smazání záznamu snížíš pozici o jdničku všem, které mají pozici vyšší než aktuálně smazaný prvek.
tommyH
Profil *
Díky tohle sem potřeboval slyšet. Ještě když to teda nebude AI se nebude automaticky přidávat hodnota při vytvoření že ano? Takže budu muset při tvorbě nového záznamu zjistit nejvíšší hodnotu a uložit o jednu větší.
tommyH
Profil *
Už jsem vyřešil přehazování záznamů a i tavrbu nového záznamu. Ale ještě řeším delete záznamu (zmenšení všech po něm následujících pořadí). Mám to takto:
$select = mysql_query("SELECT poradi FROM rubriky WHERE nazevprac = '".$_GET['name']."' LIMIT 1 ");
$select2 = mysql_fetch_array($select);
$del = mysql_query("UPDATE rubriky SET poradi= poradi -1 WHERE poradi > '".$select2['poradi']);

Neví někdo proč? Nebo nemá lepší řešení? Díky moc.
Kajman_
Profil *
A vybíráte to pořadí mazaného před tím, než to smažete? Pak už tam totiž žádná data toho řádku nebudou.
tommyH
Profil *
Kajman

Ano, po tom co jsem napsal následuje příkaz DELETE.
Kajman_
Profil *
Neví někdo proč?

Težko říct na co se ptáte. Pokud ten kód nefunguje, vypište chyby mysql.

Pokud chyba bude hlásit, že na sloupci poradi máte unikátní index, tak dělejte select, delete, update.
tommyH
Profil *
Díky za snahu už to mám byla tam drobná chybka. Ještě jednou díky všem.

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: