Autor | Zpráva | ||
---|---|---|---|
martin5504 Profil |
#1 · Zasláno: 27. 8. 2014, 12:04:41
Ahojte, prosím vás potrebujem poradiť, potreboval by som jednoduchú PHP funkciu, ktorá by vytvárala číslo postupne nie random, ale postupne. Teda 1 potom 2, ale potreboval by som to tak aby sa už tá 1 nikdy nepoužila. Díki
|
||
lionel messi Profil |
function postupneCisla() { static $cislo = 0; $cislo++; return $cislo; } echo postupneCisla(); //vypíše 1 echo postupneCisla(); //vypíše 2 echo postupneCisla(); //vypíše 3 Ešte doplním, táto funkcia vypíše po každom zavolaní číslo o 1 vyššie, ale ide o prípad „v rámci stránky“. Bolo by vhodné upresnenie, viď [#3] juriad |
||
juriad Profil |
#3 · Zasláno: 27. 8. 2014, 12:14:45
martin5504:
„aby sa už tá 1 nikdy nepoužila“ Tím myslíš v rámci nějakého bloku, v rámci stránky, v rámci uživatele, v rámci celého webu, nebo co vlastně chceš? Kolik takových různých sekvencí chceš? |
||
martin5504 Profil |
#4 · Zasláno: 27. 8. 2014, 12:17:29
Ono sa to bude zapisovať do tabulky do db, ako port, teda bude tam IP:PORT, ale nemožem mat rovnaky PORT vase, tak potrebujem aby sa to zapisovalo do db, postupne, 1- ak bude pouzite tak sa zapise 2, atd atd
|
||
lionel messi Profil |
#5 · Zasláno: 27. 8. 2014, 12:19:30
martin5504:
Toto sa dá podľa mňa vyriešiť aj na úrovni SQL, nastav príslušnému stĺpcu tabuľky AUTO INCREMENT a máš to ďaleko jednoduchšie. |
||
martin5504 Profil |
#6 · Zasláno: 27. 8. 2014, 12:27:24
Tak sa mi to nedari urobit, asi pretoze tam uz mam ID z AI.
#1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key |
||
lionel messi Profil |
Riešenie by mohlo byť naznačené tu: Tvorba unikátního url článku. Ešte lepšie odpovedal juriad.
|
||
juriad Profil |
#8 · Zasláno: 27. 8. 2014, 12:29:49
martin5504:
Tak vytvoř novou tabulku obsahující jediný sloupec, která bude sloužit jen jako generátor čísel. Uvědom si také, že máš k dispozici jen 64500 portů, až ti dojdou, co budeš dělat? |
||
Joker Profil |
#9 · Zasláno: 27. 8. 2014, 12:32:43
martin5504:
A je problém, aby se port převzal z ID? Teda kromě toho, že port může pokud vím být maximálně 65535. Jinak nemá být port unikátní jen pro jednu IP? (Nevidím důvod, proč by nemohl být port stejný, pokud budou různé IP.) V tom případě by šlo zjistit nejvyšší použitý, SELECT MAX(port) FROM tabulka WHERE ip=ip adresa a pak použít port + 1.
|
||
DJ Miky Profil |
#10 · Zasláno: 27. 8. 2014, 14:02:00
Joker:
„V tom případě by šlo zjistit nejvyšší použitý […] a pak použít port + 1.“ Na tento přístup pozor. Pokud náhodou nastane situace, že přijdou dva požadavky ve stejnou chvíli, může se jim přidělit stejné číslo portu. Pokud bude záznamů málo, přiklonil bych se k řešení generovat port přičtením konstanty k ID záznamu, např. ID + 1000 pro porty od 1001 výše. Navíc takové řešení zajistí, že se port nikdy nerecykluje (což možná v tomto případě není potřeba). Řešení s vybíráním maxima má vlastnost, že při smazání posledního záznamu se dalšímu přidanému přiřadí stejný port, jako měl smazaný záznam. |
||
Joker Profil |
#11 · Zasláno: 27. 8. 2014, 14:46:59
DJ Miky:
„Pokud náhodou nastane situace, že přijdou dva požadavky ve stejnou chvíli, může se jim přidělit stejné číslo portu.“ Od toho jsou zámky. I když jestli jsem dobře četl manuál, jeden název může mít jen jeden zámek a jinak se musí použít alias, takže nějak: LOCK TABLES tabulka READ, tabulka AS tabIns WRITE , SELECT z tabulka, INSERT do tabIns, UNLOCK TABLES .
„Řešení s vybíráním maxima má vlastnost, že při smazání posledního záznamu se dalšímu přidanému přiřadí stejný port, jako měl smazaný záznam.“ Pokud se záznamy reálně vymažou. Pokud budou mít stav a „smazání“ je jen přesune do stavu „deleted“ (nebo něco), tak ne. |
||
Časová prodleva: 10 let
|
0