Dejme tomu že mám tabulku s auto increment číselným klíčem. Pokud nějaký řádek vymažu, není již dané id k dispozici. Existuje v mysql nějaká možnost jak vypsat tato již neexistující id?
Mimo případné MySQL řešení, mne napadají jen dvě jiná s použitím php:
1) pomocí cyklu bych pro každé id {for ($i=1; $i<=30000;$i++)} dal dotaz na db a pokud mysql_num_rows($dotaz) bude 0 tak ho vypsal
2) převedu všechna existující id z db do pole a pak porovnám pole s cyklem {for ($i=1; $i<=30000;$i++)}
#1VelkyBubak
Ještě mě napadla jedna možnost s mysql, která je ve svém základním tvaru vypíše ale k mému překvapení jen poslední z nich - očekával jsem že to bude fungovat pro:
(a.id+1) as ids /* první */
(pokud je jich za sebou odebraných více nezobrazí se a zviditelnění ostatních neexistujících id by bylo tímto způsobem velice obtížné)
SELECT (a.id-1) as ids FROM tabulka as a left join tabulka as b on a.id=(b.id+1) where b.id is null
#2VelkyBubak
Vypsat neexistujísí ID samozřejmě jde. Můžeš si udělat trigger, který ti vymazaná ID bude ukládat do další tabulky, ve které je budeš mít jako na dlani.
Ve své podstatě není žádný důvod to dělat, protože smazaná ID by nás už neměla nijak zajímat a jejich použití dokáže značně zesložitit aplikaci a vytvořit nebezpečné kombinace.
Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:207:e...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
#1VelkyBubak
Další možnost je nemazat řádek, ale přidat k němu příznak (další sloupec tabulky) smazáno. Pak snadno zjistíš, které položky byly smazané.
Nahlásit jako SPAM
IP: 147.251.236.–
Spát lze čtyři hodiny denně, spát déle je nemístný přepych.
Thomas Alva Edison
Ook, tohle mi bylo jasné šlo mi o to, jak to udělat ve chvíli, kdy už jsou smazané.
Respektive původní myšlenka která mne sem dovedla byla, jak prohodit obrázky, které jsou pojmenovány po těchto id.
1. Musím najít nějaký odkladový prostor, kde nic není (tedy jeden z těch neexistujících id, protože nechci zasahovat do auto increment a zbytečně přidělávat nová prázdná místa), 2. přesunu tam první z obrázků (přepíšu id na ono volné a v závislosti na tom, přesunu data obrázku na odpovídající místo) 3. na takto uvolněné místo a s tím i id přesunu druhý obrázek 4. přesunu první obrázek na místo druhého - a mám stejná neexistující id jako na počátku
Ok.
Přesouvání obrázků bylo důvodem, proč jsem chtěl využít na krátkou chvilku již odstraněné id (jediná souvislost s tématem spočívá v tom že záznam o obrázku je řádkem v tabulce. Aktuálně se snažím vyřešit situaci, kdy potřebuji prohodit id dvou řádků, nicméně je tu vlastně ještě varianta s prohozením všech ostatních hodnot krom id pomocí php, což mi z nějakého důvodu uniklo. Zdá se že málokdy přijdu na nejsnažší řešení.