Autor | Zpráva | ||
---|---|---|---|
FibbsCZ Profil |
#1 · Zasláno: 20. 6. 2015, 12:31:14
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 |
#2 · Zasláno: 20. 6. 2015, 12:36:20
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 |
#3 · Zasláno: 20. 6. 2015, 13:18:13
Omlouvám se, nejsem co se týče databází nějak v přehledu.
Co to je auto_increment ? |
||
Joker Profil |
#4 · Zasláno: 20. 6. 2015, 13:23:15
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. |
||
Časová prodleva: 10 let
|
0