Diskuze: cisla objednavek

PHP PHP cisla objednavek American English version English version

Avatar
brickleberry
Člen
Avatar
brickleberry:

Ahoj, snad tím, že vytvářím nové vlákno ještě když nemám dořešeno starší neporušuji zdejší pravidla. Pokud ano, omlouvám se...

Napřed bych asi měl popsat problém... Takže mám tabulku objednávky, zde se mi tedy ukládají objednávky včetně aktuálního datumu (fukce NOW() ) Vše jede jak má, ale nyní jsem založil do tabulky sloupec cisla_objednavek. Ten je samozřejmě prázdný, což je logické zatím není součástí insertního dotazu. Má myšlenka je taková, že bych vzal aktuální datum ještě před jeho vložením do DB (kde má formát 2015-02-04, čili je zde ve sloupci nastaven datový typ DATE) a tento datum vzal dal do formátu 20150204 a přidal k němu ID objednávky takže by to vypadalo takto 20150204100 tímpádem by nemohlavvzniknout duplicita, protože id objednávky je vždy jedinečné.. Takže zatím má otázka je to proveditelné? nebo to mám řešit spíše pomocí triggerů a autoincrementu? Na to si ale netroufám... Pokud má myšlenka je proveditelná, poradí mi někdo jak začít? jen upozorňuji, že se bude jednat o 2 datumy. První klasický co tam již je fukcí NOW() a druhý upravený a přidání k němu ID objednávky. Děkuji za případné rady a tipy

 
Odpovědět 4.2.2015 18:51
Avatar
BlugW
Redaktor
Avatar
Odpovídá na brickleberry
BlugW:

Není to zbytečné? Přece ID je taky unikátní a nemůže se opakovat.

Ale pokud ti jde aby to vypadalo pěkně "32548" a ne "1", "2", atd..
Tak můžeš např. č.objednavky dělát takto:

$id = "id z DB"
$cislo = 54681 // libovolné číslo
$objednavka = $cislo . $id

tím pádem se ti č.objednávky nebude opakovat. Jelikož id je vždy jedinečné.

PS: Číslo může být např. číslo dané sekce v eshopu :)

Editováno 4.2.2015 18:59
Nahoru Odpovědět  +1 4.2.2015 18:58
Pořiď si mac na www.appletrh.cz. Novinky a zajímavosti ze světa Apple na https://www.applemagazin.eu
Avatar
brickleberry
Člen
Avatar
Odpovídá na BlugW
brickleberry:

Takže říkáte, že si to tímto zbytečně komplikuji? Šlo mi o to, že by se v tom čísle potom dalo dohledat danou objednávku lépe... tj. když bude mít někdo na třeba faktuře 20150204+id obj. vědělo by se, že se jedná o objednávku z 4.2.2015 + id... Nyní když mám dvě tabulky s objednávkama pro registrované a neregistrované pak by to mohlo dělat guláš ne? leda, že bych podle Vašeho kódu nastavil manuálně jiné číslo třeba 3888 na nereg. uživatele a 4888 na reg uživatele...?

 
Nahoru Odpovědět 4.2.2015 19:25
Avatar
BlugW
Redaktor
Avatar
Odpovídá na brickleberry
BlugW:

Snažíš se udělat to co už je v základu hotové :D

Přece když v tabulce budeš vyhledávat podle ID a podle toho čísla objednávky tak dostaneš stejné výsledky :)

Nahoru Odpovědět 4.2.2015 19:31
Pořiď si mac na www.appletrh.cz. Novinky a zajímavosti ze světa Apple na https://www.applemagazin.eu
Avatar
sahlepik
Člen
Avatar
Odpovídá na brickleberry
sahlepik:

Mě se naopak líbí tvoje myšlenka datum+jedinečné id. Má to logiku, je to přehledné a jedinečnost čísla objednávky zůstane zachována. Ale to je jen můj osobní názor. To id se každý den začíná načítat od "1" nebo to stále pokračuje v inkrementaci? Podle mě ale není nutné mít zvlášť část datumu a id. spojil bych to a uložil do jednoho sloupce jako id_objednavky

Editováno 4.2.2015 19:36
 
Nahoru Odpovědět 4.2.2015 19:34
Avatar
brickleberry
Člen
Avatar
Odpovídá na sahlepik
brickleberry:

tak jsem nakonec přistoupil, jelikož jsem ještě lama k tomu rychlešímu tvému řešení.. Nicméně se mi tedy do sloupce cislo_objednavky ulozi toto 1000id_objednav­ky_bez_registra­ce
skript

$id = "id_objednavky_bez_registrace" ;
$cislo = 1000; // libovolné číslo
$cislo_objednavky = $cislo . $id;

        if (mysql_query($sql)) {
          $sql="INSERT INTO e_objednavky_bez_registrace (nazev,pocet,cena,jmeno,prijmeni,ulice,mesto,psc,email,telefon,datum,id_produktu,cislo_objednavky)VALUES('$nazev','1','$cena','$jmeno','$prijmeni','$ulice','$mesto','$psc','$email','$telefon',NOW(), '$id_produktu', '$cislo_objednavky')";

logicky usuzuji, že to nedokázalo přečíst dané id?

reakce k dalšímu příspěvku od sahlepik:
id objednávky je primary klic a autoincrement, takže to od 1 každý den nepokračuje.. takže tvá myšlenka spočívá v přiřetězení sloupce datumu a id... ale nevím jak to udělat aby se jednou ten datum uložil ve formátu 2015-02-04 a podruhé aby se uložil 20150204 a id..

 
Nahoru Odpovědět 4.2.2015 19:49
Avatar
sahlepik
Člen
Avatar
Odpovídá na brickleberry
sahlepik:

Datum ve formátu xxxx-xx-xx se dá rozsekat PHP funkcí explode(), kdy dělícím znakem bude pomlčka a pak ty díly, které vzniknou, jen spojíš + k němu připojíš číselné id.

$id = "id_objednavky_bez_registrace" ;
$cislo = 1000; // libovolné číslo
$cislo_objednavky = $cislo . $id;

Tohle je zajímavý kód, k čemu tam je ten dlouhý textový řetězec?

 
Nahoru Odpovědět 4.2.2015 19:55
Avatar
brickleberry
Člen
Avatar
Odpovídá na sahlepik
brickleberry:

myslíš tím řádek

$id = "id_objednavky_bez_registrace" ;

? že? Už jsem si to uvědomil a napsal místo toho

$id = $_GET["id_objednavky_bez_registrace"] ;

nyní mi to v DB ukáže pouze hodnotu 1000 ALE nepřičte tam id objednavky

 
Nahoru Odpovědět 4.2.2015 19:58
Avatar
Fredep
Redaktor
Avatar
Odpovídá na brickleberry
Fredep:

A co do sloupců id_objednavky vkládat normálně ID, jak jde za sebou a při výstupu to spojit s datem pomocí nějaké pomlčky? Bylo by to efektivní...

Nahoru Odpovědět 4.2.2015 20:00
Týmová práce je důležitá proto, aby bylo možno obvinit z neúspěchu někoho jiného.
Avatar
brickleberry
Člen
Avatar
Odpovídá na Fredep
brickleberry:

Nevím jestli jsem porozuměl dobře, ale id_objednavky je klasicke id s autoincrementem.

 
Nahoru Odpovědět 4.2.2015 20:03
Avatar
sahlepik
Člen
Avatar
Odpovídá na brickleberry
sahlepik:

A co třeba jako id použít za sebou napsaný datum a aktuální čas? Např.:

$id = date("YnjHis");

Tohle bude jistě jedinečné číslo a stále budeš schopen z čísla objednávky vyčíst, kdy byla uskutečněna a dokonce v kolik hodin, minut a sekund :D

 
Nahoru Odpovědět 4.2.2015 20:15
Avatar
brickleberry
Člen
Avatar
Odpovídá na sahlepik
brickleberry:

Nevím co na to napsat.. Málem mi ukápla i krokodýlí slza ... Moc děkuji... Nejen tobě ale všem co se účastnili...

 
Nahoru Odpovědět 4.2.2015 20:20
Avatar
brickleberry
Člen
Avatar
Odpovídá na sahlepik
brickleberry:

měl bych ještě konečný dotaz. Když mám nastaveno na sloupci cislo_obj varchar(100) a ukládám tam čísla takto velká 2015242245582000 nebude to v budoucnu dělat problém, že nebude stačit velikost znaků na tom sloupci.. chápu to dobře že teď to má jelikož je to 16cticiferné číslo varchar(16) ?

 
Nahoru Odpovědět 4.2.2015 22:49
Avatar
Ori
Člen
Avatar
Odpovídá na brickleberry
Ori:

tak za prvé pokiaľ tam nebudeš mať iné znaky ako čísla tak by som to nastavil na int, poprípade bigint. Taktiež kvôli duplicite údajov by som stĺpec číslo objednávky úplne vynechal, pretože mal by si mať stĺpec date a taktiež ID. A keďže tento stĺpec je zložených z týchto dvoch tak zbytočne budeš držať v DB údaje, čiže zbytočnosť. Predstav si to, že by si mal stĺpec Meno potom ďalší Priezvisko a potom stĺpec celé meno(kde by bolo uložené meno aj priezvisko) ... aká by bola pointa tohto stĺpca ?

 
Nahoru Odpovědět  +1 4.2.2015 23:05
Avatar
sahlepik
Člen
Avatar
Odpovídá na brickleberry
sahlepik:

Každá číslice se v případě VARCHAR bere jako jeden znak, ID objednávky totiž ukládáš do databáze jako textový řetězec s proměnlivým počtem znaků.

 
Nahoru Odpovědět 4.2.2015 23:57
Avatar
solta
Člen
Avatar
solta:

nevim presne na co to potrebujes ale cislo objednavky se obvykle pouziva jako variabilni symbol ten muze mit maximalne 10 cislic dobrym zvykem je na zacatku myt 2 mebo 4 znamky urcujici rok a dale nasleduje vetsinou poradove cislo objednavky toho roku. Obcas se jeste rozlisuje treba stredisko, pridava se jeste treba mesic.
YYYY00000n
YY0000000n
YYMM00000n
YY0100000n

 
Nahoru Odpovědět 5.2.2015 14:31
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 17 zpráv z 17.