Autor Zpráva
FibbsCZ
Profil
Ahoj,
potřeboval by jsem funkci v php (na registrace), která ověří, zda ID (které se tvoří pomocí rand()) existuje již v DB, pokud ano, celý proces vytváření ID se spustí znovu (tzn. opět se spustí rand()) a opět to ověří jestli náhodou existuje, až do doby vytvoření ID které v DB není,

nebo funkci, která vytváří ID s devítimístným číslem, které začíná od 000000000, a při každé nové registraci si to vytáhne poslední největší ID, přičte číslo 1, a pro jistotu ověří, zda nově vytvořené ID už neexistuje. (pro případ kdyby jsem si v DB chtěl přepsat ID na číslo dle mého uvážení)

Děkuji mnohokrát za případné rady :)
xROAL
Profil
Máš vážny dôvod prečo nepoužiť auto_increment?
Nemusel by si sa o ID vôbec starať.

Ak by si ho z nejakého estetického dôvodu chcel mať 9-miestne, môžeš mu len pri výpise doplňovať nuly na začiatok, napríklad aj v SQL:
SELECT LPAD(id, 9, '0') AS id...
FibbsCZ
Profil
Omlouvám se, nejsem co se týče databází nějak v přehledu.
Co to je auto_increment ?
Joker
Profil
FibbsCZ:
funkci v php (na registrace), která ověří, zda ID (které se tvoří pomocí rand()) existuje již v DB, pokud ano, celý proces vytváření ID se spustí znovu

To je úplně triviální a nevidím tam problém, se kterým by bylo třeba radit.
Byl by to prostě cyklus, který vygeneruje ID, udělá SELECT COUNT pro to ID a to dělá tak dlouho, dokud ten počet nebude 0.
Nevýhoda toho řešení je, že jednak vyžaduje to ověřování existence a jednak to dobře funguje jen dokud je vyčerpaná jen relativně malá část dostupných hodnot. A při vyčerpání všech hodnot to skončí v nekonečném cyklu (v praxi asi k vyčerpání všech hodnot ani nedojde, protože ještě předtím ten skript přestane být použitelný, protože dohledání volného ID bude trvat neúnosně dlouho).

Lepší by bylo jít cestou číselné řady. I když pro některá použití může vadit, že číselná řada je předvídatelná (např. když mám ID 33, vím, že předchozí ID bylo 32 a následující bude 34). To se dá řešit tak, že se zkombinuje číslo z číselné řady a pár náhodných číslic. Druhá možnost by byla si vygenerovat dvě čísla, kdy jedno by určovalo pořadí čerpání a druhé by bylo ten identifikátor (např. dvojice ID : pořadí 1 : 37, 2 : 20, 3 : 5, 4 : 15, 5 : 22 - čerpání by bylo v pořadí: 3, 4, 2, 5, 1).

nebo funkci, která vytváří ID s devítimístným číslem, které začíná od 000000000, a při každé nové registraci si to vytáhne poslední největší ID, přičte číslo 1
V případě MySQL databáze tohle dělá auto_increment.

a pro jistotu ověří, zda nově vytvořené ID už neexistuje
To je zbytečné.
ID s hodnotou (nejvyšší existující hodnota v databázi + 1) z principu nikdy nemůže existovat.

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