Autor | Zpráva | ||
---|---|---|---|
midlan Profil |
#1 · Zasláno: 3. 12. 2015, 14:30:44
Ahoj,
potřeboval bych radu jak procházet produkty podle určité priority. V mém případě podle prodejnosti. Dejme tomu, že mám eshop, ale nemám sklad a objednávky rovnou předávám dodavateli. Při procházení (SELECT) produktů (a jejich následné kontrole dostupnosti u dodavatele) bych chtěl upřednostnit ty produkty které se nejvíce prodávají (abych minimalizoval dobu, kdy budu prodávat produkty, které už dodavatel nemá). Zkontrolovat všechny najednou nelze, kvůli jejich velkému počtu. Věděl by někdo jak takovou prioritu zavést na úrovni dotazu? Díky. |
||
Keeehi Profil |
#2 · Zasláno: 3. 12. 2015, 15:08:48
Pořadí se určuje pomocí
ORDER BY jmeno-sloupce . Pak už jen záleží, zda jsou v té databázi údaje, z kterých jde prodejnost zjistit.
|
||
tiso Profil |
#3 · Zasláno: 3. 12. 2015, 15:23:19
midlan: „abych minimalizoval dobu, kdy budu prodávat produkty, které už dodavatel nemá“
Toto nevyriešiš tým selectom, ale tak, že budeš označovať dostupnosť produktov (stĺpec v tabuľke produktov). A potom zobrazíš iba dostupné. |
||
midlan Profil |
Keeehi:
Ano jak funguje klauzule ORDER BY vím. Jenže v tomto případě ji nelze použít tak jednoduše. Nejlépe prodávané produkty by se měly kontrolovat několikrát denně, a ty nejméně prodávané třeba jednou za týden. Dejme tomu, že vzorec na počet kontrol za den je přibližně min(n/30, 0.15) , kde n je prodejnost za posledních 30 dnů. Prodejnost je známá.
Vhledem k velkému počtu produktů, bude tento dotaz pokládat PHP script každou minutu. A následně hned provádět kontrolu (a případně měnit skladovou dostupnost produktů). tiso: Aby se nezobrazovaly vyprodané produkty je vyřešené. Je to funkční eshop se vším všudy. Select má v tomto případě vrátit seznam produktů ke kontrole. |
||
Kajman Profil |
#5 · Zasláno: 3. 12. 2015, 16:06:15
midlan:
Máte u produktů sloupec, kde je datum poslední kontroly dostupnosti? Každý produkt musíte kontrolovat samostatně? Nelze u dodavatele zjistit seznam všech dostupných produktů jedním požadavkem? |
||
midlan Profil |
#6 · Zasláno: 3. 12. 2015, 16:15:13
Kajman:
Sloupec nemám, zavést ho mohu. Jejich API nabízí jen možnost jedním požadavkem kontrolovat jen jeden produkt. |
||
Kajman Profil |
#7 · Zasláno: 3. 12. 2015, 16:26:26
Zavedl bych tedy sloupec s tou poslední kontrolou. Pak bych si seřadil produkty sestupně podle počtu prodaných kusů od té poslední kontroly. Druhý parametr řazení pak bude ten nový sloupec s datumem.
Z toho seznamu můžete vzít omezený počet řádků. Případně ho doplnit o řádky, kde datum poslední kontroly je příliš staré. |
||
midlan Profil |
#8 · Zasláno: 3. 12. 2015, 16:41:09
Kajman:
To zní rozumně, udělám to tak. Díky! |
||
Časová prodleva: 11 měsíců
|
|||
midlan Profil |
Algoritmus funguje dobře, jen po několika měsících provozu jsem přišel na slabé místo toho algoritmu. Konkrétně: když v případě dobře prodávaného produktu se zjistí že je u dodavatele vyprodaný, automaticky se nastaví že není skladem. To je správně. Ale má to háček. Produkt je nyní vyprodaný, nejsou prodávány žádné kusy (logické když je vyprodaný), jeho priorita zůstane už navždy 0 (když prioritou je počet prodaných kusů od poslední kontroly). Pokud skript na kontrolu skladu neběží dostatečně často, na produkty s prioritou 0 už nikdy nemusí dojít, zůstanou ve stavu není skladem už navždy (přestože dodavatel už produkt může mít opět skladem). Případně zůstane vyprodaný hodně dlouhou dobu, což působí prodejní ztráty, zvlášť v případě (v minulosti) dobře prodávaného produktu.
|
||
Kajman Profil |
Můžete mít ještě druhou frontu, kde budete kontrolovat jen vyprodané produkty, zda již nejsou opět k mání. Řadit např. vzestupně podle počtu kontrol, kdy stále není skladem (při navrácení čítač vynulovat).
Fronty můžete nějak střídat - např. jednu hodinu denně věnovat těmto případům. Edit: midlan: „na produkty s prioritou 0 už nikdy nemusí dojít, zůstanou ve stavu není skladem už navždy“ Na takové produkty by mělo dojít díky „doplnit o řádky, kde datum poslední kontroly je příliš staré“, ale je pravda, že to může být zbytečně za dlouho. |
||
midlan Profil |
#11 · Zasláno: 8. 11. 2016, 19:04:43
Kajman:
„Na takové produkty by mělo dojít díky ‚doplnit o řádky, kde datum poslední kontroly je příliš staré‘, ale je pravda, že to může být zbytečně za dlouho.“ Tuto funkcionalitu jsem právě tehdy nezaimplementoval. Spoléhal jsem na to, že kontrola poběží dostatečně často, a že se dostane i na produkty s prioritou 0. Což se však po čase ukázalo že se neděje, kontrola tedy neběží dostatečně často. Děkuji za radu, nějaké z nabízeních řešení tedy použiji. |
||
Časová prodleva: 8 let
|
0