Heeeeeeeeeeeeeeelp!!!!!
14 отговора
593 прегледа
Heeeeeeeeeeeeeeelp!!!!!
Triabva da napravia baza danni za dvijenie na artikulite w edin sklad .
Trqbwa da mogat da se poluchavat prihodi da se izpisvat razhodi ida se pravi proverka za nali`nosti
Niakoi da dade niakava ideia za strukturata na bazata danni?

Trqbwa da mogat da se poluchavat prihodi da se izpisvat razhodi ida se pravi proverka za nali`nosti
Niakoi da dade niakava ideia za strukturata na bazata danni?
Re: Heeeeeeeeeeeeeeelp!!!!!
Божеееееееееееее.Тва е може би най-трудната част в системата. И ако няко ти даде решение с един отговор ще скоча от прозореца.
Re: Heeeeeeeeeeeeeeelp!!!!!
Az shte skocha ot prozoreca ako nqkoj vaobshte uspee da mu dade dobro reshenie imajki predvid "podrobnoto" mu opisanie na problema ;)
Re: Heeeeeeeeeeeeeeelp!!!!!
Наистина "много" добре е формулирана задачата.
Тва е началнически стил на работа.
Имах шеф дето буквално формулираше заданието по следния начин:
"Искам да ми направиш такова едно нещо, че като се натисне нещо да се случи нещо."
Тва е истина.Мноо дивно беше.
Тва е началнически стил на работа.
Имах шеф дето буквално формулираше заданието по следния начин:
"Искам да ми направиш такова едно нещо, че като се натисне нещо да се случи нещо."
Тва е истина.Мноо дивно беше.
:)
kwo mu e na zadanieto :) , ako nqkoi e pluchil po dobro zadanie za skladowa programa znachi q e pisal za nakoi zapadqk (makar che te mai ne si prychwan takiwa programi)
table Dwijenie - Art, tipDwijenie, OtSklad, wSklad, Kol
table Nalichnost - Sklad, Art, Kol
table Tran - ID, IDDwijenie, Art, Sklad, Znak(+-), Kol
table tipSklad, Sklad
Dwijenie :
1. tip Dostawka OtSklad = dostawchik, wSklad = Sklad
2. tip Prodajba ili drugo izpiswane izwyn skladowete OtSklad = Sklad, wSklad = Client
3. tip Premestwane OtSklad = sklad1, wSklad = Sklad2
*kato pri promqna na zapis se prawi syotwetnata w Tran i se update-wa
Nalichnost
tipSklad : wkluchwa wsichki dostawchici, clienti i wyreshni skladowe razdeleni po tipowe
table Dwijenie - Art, tipDwijenie, OtSklad, wSklad, Kol
table Nalichnost - Sklad, Art, Kol
table Tran - ID, IDDwijenie, Art, Sklad, Znak(+-), Kol
table tipSklad, Sklad
Dwijenie :
1. tip Dostawka OtSklad = dostawchik, wSklad = Sklad
2. tip Prodajba ili drugo izpiswane izwyn skladowete OtSklad = Sklad, wSklad = Client
3. tip Premestwane OtSklad = sklad1, wSklad = Sklad2
*kato pri promqna na zapis se prawi syotwetnata w Tran i se update-wa
Nalichnost
tipSklad : wkluchwa wsichki dostawchici, clienti i wyreshni skladowe razdeleni po tipowe
Абе то хубаво ама ....
Пък аз освен склад имах и
Комплектност Във Склада
Та ми се наложи да измисля, някои доста хитри неща.
Щото продукт A се състои от N части A1, A2 ... AN
И на всичкото от горе частите не са заменяеми.
Та справката по Части и бройки
1 - 20
2 - 30
3 - 5
4 - 10
Не дава 5 пълни комплекта ами примерно
3 пълни (1,2,3,4,5)
10 (1,2,4)
3 (2,3)
И така нататък ...
Е наложи се SQL висш пилотаж
мразя складове и фактури и подобни
Linux is like a wigwam - No Windows, No Gates, Apache inside
Комплектност Във Склада
Та ми се наложи да измисля, някои доста хитри неща.
Щото продукт A се състои от N части A1, A2 ... AN
И на всичкото от горе частите не са заменяеми.
Та справката по Части и бройки
1 - 20
2 - 30
3 - 5
4 - 10
Не дава 5 пълни комплекта ами примерно
3 пълни (1,2,3,4,5)
10 (1,2,4)
3 (2,3)
И така нататък ...
Е наложи се SQL висш пилотаж
мразя складове и фактури и подобни
Linux is like a wigwam - No Windows, No Gates, Apache inside
Re: Примерче - задачка :) MySQL естествено
Това е опсостен вариант на задачата за движение.
sid - е id на "Склад" да кажем
pid - е id на Част
Под "комплект" се разбира: Комбинация от 5 части pid = (1,2,3,4,5) като могат да се комбинирт произволно. примерно Всяка дръжка - става на всяка кутия
mysql> select * from c;
+------+------+------+
| sid | pid | qty |
+------+------+------+
| 1 | 1 | 185 |
| 1 | 2 | 13 |
| 1 | 3 | 509 |
| 1 | 4 | 504 |
| 1 | 5 | 992 |
| 2 | 5 | 451 |
| 3 | 1 | 278 |
| 3 | 3 | 35 |
| 4 | 3 | 344 |
| 4 | 1 | 614 |
| 4 | 2 | 39 |
| 4 | 5 | 354 |
| 4 | 4 | 98 |
+------+------+------+
mysql> SELECT ...; - Един само
+------+-------------+------+------+------+------+------+--------------+
| sid | total_parts | p1 | p2 | p3 | p4 | p5 | msg |
+------+-------------+------+------+------+------+------+--------------+
| 1 | 2203 | 185 | 13 | 509 | 504 | 992 | 13 Complects |
| 2 | 451 | 0 | 0 | 0 | 0 | 451 | |
| 3 | 313 | 278 | 0 | 35 | 0 | 0 | |
| 4 | 1449 | 614 | 39 | 344 | 98 | 354 | 39 Complects |
+------+-------------+------+------+------+------+------+--------------+
4 rows in set (0.00 sec)
Ха да видим, кой ще го напише този SELECT
Linux is like a wigwam - No Windows, No Gates, Apache inside
sid - е id на "Склад" да кажем
pid - е id на Част
Под "комплект" се разбира: Комбинация от 5 части pid = (1,2,3,4,5) като могат да се комбинирт произволно. примерно Всяка дръжка - става на всяка кутия
mysql> select * from c;
+------+------+------+
| sid | pid | qty |
+------+------+------+
| 1 | 1 | 185 |
| 1 | 2 | 13 |
| 1 | 3 | 509 |
| 1 | 4 | 504 |
| 1 | 5 | 992 |
| 2 | 5 | 451 |
| 3 | 1 | 278 |
| 3 | 3 | 35 |
| 4 | 3 | 344 |
| 4 | 1 | 614 |
| 4 | 2 | 39 |
| 4 | 5 | 354 |
| 4 | 4 | 98 |
+------+------+------+
mysql> SELECT ...; - Един само
+------+-------------+------+------+------+------+------+--------------+
| sid | total_parts | p1 | p2 | p3 | p4 | p5 | msg |
+------+-------------+------+------+------+------+------+--------------+
| 1 | 2203 | 185 | 13 | 509 | 504 | 992 | 13 Complects |
| 2 | 451 | 0 | 0 | 0 | 0 | 451 | |
| 3 | 313 | 278 | 0 | 35 | 0 | 0 | |
| 4 | 1449 | 614 | 39 | 344 | 98 | 354 | 39 Complects |
+------+-------------+------+------+------+------+------+--------------+
4 rows in set (0.00 sec)
Ха да видим, кой ще го напише този SELECT
Linux is like a wigwam - No Windows, No Gates, Apache inside
Re: Примерче - задачка :) MySQL естествено
Принципно много мразя задачки от тоя род ама сега нещо се замислих.Та не ми е ясно каква е целта.Обясни ми какво означава примерно първия ред от резултата.От р1 до р5 са различните части и тва е едната възможна комбинация ама тва последното че има 13 комплекта какво е като не се знае по колко имаме от всяка част????
Re: Примерче само :(
Това със задачката не беше добра идея.
Както казах комплекта може да се "събере" от произволни части.
Представи си
p1 - Кутия
p2 - Капак
p3 - Дръжка
"Комплект" = коя да е кутия с коя да е дръжка с кой да е капак
Значи в случая ред едно ще рече:
В склад едно може да сглобим 13 комплекта
А надолу - в 2 и 3 нито един, в 4 - 39
Linux is like a wigwam - No Windows, No Gates, Apache inside
Както казах комплекта може да се "събере" от произволни части.
Представи си
p1 - Кутия
p2 - Капак
p3 - Дръжка
"Комплект" = коя да е кутия с коя да е дръжка с кой да е капак
Значи в случая ред едно ще рече:
В склад едно може да сглобим 13 комплекта
А надолу - в 2 и 3 нито един, в 4 - 39
Linux is like a wigwam - No Windows, No Gates, Apache inside
Редактирано от salle на
Re: Примерче само :(
Хубаво.Ама не е ли достатъчно тогава да намериш min от р1,р2,р3 , което всъщност ти дава броя на комплектите които можеш да зглобиш?
Тука някаква уловка ли има не мога да схвана.
Тука някаква уловка ли има не мога да схвана.
Re: Примерче само :(
Достатъчно е.
Никаква уловка няма точно min() използвам. Просто за да изглежда по-красиво съм махнал 0 от последната колона. А точно такива изисквания в заданието тровят най-много живота на нашего брата.
И най-често (понеже вече са те вбесили) сядаш и набързо го филтрираш в клиентската част. Ама в SQL-а е и по-елегантно и по ефикасно.
В случая неприятното е, че фигурира числото 5. т.е. предварително трябва да знаеш колко са възможните части. Забележи възможните а не съществуващите. т.е. sub-select не ти върши работа.
Веселото става когато усложниш този вариант и дефинираш
Комлект като "Комплект от части с еднакъв сериен номер"
Тогава в един момент ми просветна да използвам pid - номера на частта вдигнат на степен 2 и bit-mask и ... стана
Linux is like a wigwam - No Windows, No Gates, Apache inside
Никаква уловка няма точно min() използвам. Просто за да изглежда по-красиво съм махнал 0 от последната колона. А точно такива изисквания в заданието тровят най-много живота на нашего брата.
И най-често (понеже вече са те вбесили) сядаш и набързо го филтрираш в клиентската част. Ама в SQL-а е и по-елегантно и по ефикасно.
В случая неприятното е, че фигурира числото 5. т.е. предварително трябва да знаеш колко са възможните части. Забележи възможните а не съществуващите. т.е. sub-select не ти върши работа.
Веселото става когато усложниш този вариант и дефинираш
Комлект като "Комплект от части с еднакъв сериен номер"
Тогава в един момент ми просветна да използвам pid - номера на частта вдигнат на степен 2 и bit-mask и ... стана
Linux is like a wigwam - No Windows, No Gates, Apache inside
Re: Примерче само :(
Леле мале.Голяма акробатика си напраил.Браос.
Тва с битовата маска напро ми изпрати шапката на луната.Мноо елегантно ама не сам сигурен колко от DB-тата имат побитови операции и за жалост не е много универсално.Ама като идея напрове ме побърка.
Тва с битовата маска напро ми изпрати шапката на луната.Мноо елегантно ама не сам сигурен колко от DB-тата имат побитови операции и за жалост не е много универсално.Ама като идея напрове ме побърка.
Re: Примерче само :(
Е MySQL ги има
И таман си написах комбинация от функции за да броя колко бита са вдигнати и открих, че има и такава функция
BIT_COUNT(N)
Старая се да свърша максималн част от задачката още в SQL
Преди време трябваше да размножим един и същи ред в стил
user1, нещо .....
в редове
user1 ... userN с едно и също в другите колони ... а да имаше още една която съдържаше 1...N
Та човека до мен напираше да напише еднf shell или perl скриптче ама с нарастващо удивление ме изгледа как свърших работата без да излизам от промпта на
mysql>
Всъщност за всеки ред от тази таблица се INSERT-ваха по M в друга
Което ще рече, че съм се смахнал окончателно с тоя SQL. Снощи ме попитаха още колко време ще съм online и аз преди да се усетя написах
mysql> select sec_to_time(unix_timestamp(date_format(curdate() + interval 1 day, '%Y-%m-%d 02:00:00')) - unix_timestamp());
После опитах да преброя часовете - на пръсти - сбърках веднъж и получих същото число ама по-трудно
А това вече си безумие
Linux is like a wigwam - No Windows, No Gates, Apache inside
И таман си написах комбинация от функции за да броя колко бита са вдигнати и открих, че има и такава функция
BIT_COUNT(N)
Старая се да свърша максималн част от задачката още в SQL
Преди време трябваше да размножим един и същи ред в стил
user1, нещо .....
в редове
user1 ... userN с едно и също в другите колони ... а да имаше още една която съдържаше 1...N
Та човека до мен напираше да напише еднf shell или perl скриптче ама с нарастващо удивление ме изгледа как свърших работата без да излизам от промпта на
mysql>
Всъщност за всеки ред от тази таблица се INSERT-ваха по M в друга
Което ще рече, че съм се смахнал окончателно с тоя SQL. Снощи ме попитаха още колко време ще съм online и аз преди да се усетя написах
mysql> select sec_to_time(unix_timestamp(date_format(curdate() + interval 1 day, '%Y-%m-%d 02:00:00')) - unix_timestamp());
После опитах да преброя часовете - на пръсти - сбърках веднъж и получих същото число ама по-трудно
А това вече си безумие
Linux is like a wigwam - No Windows, No Gates, Apache inside
ne e li mnogo slojno s bit-owi operacii
K-opisanie na komlektite
kid pid qty
1 1 1
1 2 2
1 3 1
2 4 3
2 5 1
N - nalichnost
sid pid qty
1 1 100
1 2 100
1 3 100
1 4 100
1 5 100
2 1 50
2 2 50
2 3 50
2 4 50
2 5 70
select N.sid,K.kid, brKoml Min(N.qty/K.Qty)
from K, N
where K.pid = N.pid
group by N.sid,K.kid
ako razbira se wsichki komlekti se prawqt ot razlichni chasti :)
spored tebe kak trqbwa da se fix-ne ako se powtarqt (i ako mislish che che twa dato sym go napisal raboti :) )
kid pid qty
1 1 1
1 2 2
1 3 1
2 4 3
2 5 1
N - nalichnost
sid pid qty
1 1 100
1 2 100
1 3 100
1 4 100
1 5 100
2 1 50
2 2 50
2 3 50
2 4 50
2 5 70
select N.sid,K.kid, brKoml Min(N.qty/K.Qty)
from K, N
where K.pid = N.pid
group by N.sid,K.kid
ako razbira se wsichki komlekti se prawqt ot razlichni chasti :)
spored tebe kak trqbwa da se fix-ne ako se powtarqt (i ako mislish che che twa dato sym go napisal raboti :) )
P.S.
wsyshnost, ako ima powtarqshti se chasti mai za wsqka chast trqbwa da se okazwa w koi kamlekt shte uchastwa