kayman
29.12.2012, 17:37:59
tabela kursy
id(int),nazwa(varchar),kurs(double)
przykład danych
1,PLN,1
2,EUR,4.3
3,USD,3.5
tabela podatek
id(int),nazwa(varchar),procent(double)
przykład danych
1,8%,8
2,23%,23
tabela element
id(int), nazwa(varchar), cena1(double), kurs1_id(int), cena2(double), kurs2_id(int), podatek_id(int), 'inne parametry nie istotne teraz jak wielkość, kolor, opis etc'
przykład danych
1,nawzwa elenentu,100,1,200,2,2,'etc nie istotne teraz'
wzór
cena_netto = (cena1 * kurs1) + (cena2 * kurs2)
cena_brutto = cena_netto + ((cena_netto * podatek) / 100)
chodzi o to że cena elementu może składać się z 2 składników cenowych o różnych kursach (one zmieniają się w zależności od kursu bankowego), obecnie pytam po kolei bazę o składniki i obrabiam skryptem php ale może się da jakoś ogarnąć to w 1 zapytaniu lub lub całość uprościć
z góry dziękuję za pomoc
sazian
29.12.2012, 18:09:46
SELECT e.*
,((cena1 * k1.kurs) + (cena2 * k2.kurs)) cena_netto
,(((cena1 * k1.kurs) + (cena2 * k2.kurs))*(1+(procent/100))) cena_brutto
FROM element e
LEFT JOIN kursy k1 ON e. kurs1_id=k1.id
LEFT JOIN kursy k2 ON e. kurs2_id=k2.id
LEFT JOIN podatek p ON e.podatek_id=p.id
proponuję zrobić z tego widok
a do zapisu cen nie używaj double tylko decimal(11,2)
wiiir
29.12.2012, 18:13:19
proste
SELECT dane.cena_netto + ((dane.cena_netto * dane.podatek) / 100) AS cena_brutto
FROM (
SELECT (e.cena1 * k1.kurs1) + (e.cena2 * k2.kurs2) AS cena_netto, p.podatek
FROM element e
JOIN kurs k1 ON e.kurs_id1= k1.id
JOIN kurs k2 ON e.kurs_id2= k2.id
JOIN podatek p ON e.podatek_id = p.id
WHERE ...
) dane
itd
chyba nie ma bledu moze w skladki ale przekompijesz i bedziesz wiedzial
sazian
29.12.2012, 18:23:55
ok tylko że z podzapytaniem chyba będzie większa złożoność zapytania
możesz sprawdzić przez EXPLAIN
kayman
29.12.2012, 18:46:36
bardzo wam dziękuje za pomoc, o takie pomysły mi chodziło
sazian
29.12.2012, 23:01:13
a sprawdziłeś które jest bardziej wydajne ?
kayman
30.12.2012, 02:41:28
jeszcze nie sprawdzałem, w zasadzie to jest przeróbka tego
kalkulatora który napisałem jakieś 1.5 roku temu i on chodzi produkcyjnie od tamtego czasu tylko jak patrze na to co ja wtedy narobiłem to krew mnie zalewa, a zaplecze wygląda raczej na prehistorię napisaną przez dzieciaka niż na poważny projekt

wydajność tego kuleje jak widać
jak uporam się z przeróbką formularzy na zapleczu to będę optymalizował wszystkie zapytania
pozdrawiam