Расчет из 3 таблиц с условием

Ekklipce

Новичок
Расчет из 3 таблиц с условием

Итак :
1 таблица - издания

table : general (издания, х,у - длина\ширина блока)
id--magazine---part---color--x-----y
1-----42--------4-----3---120--120
2-----42--------4-----3---120--120
3-----42--------4-----3----90---80

price_size (цены на рекламу блока)
id---part---color---price
42---4--------3-----2000
42---3--------3-----2000
42---3--------3-----2000

что бы узнать цену по всем отдельным genera.magazine, запрос будет такой :

SELECT general.magazine AS legend, SUM( price_size.price ) AS summa
FROM general, price_size
WHERE general.part = price_size.part AND general.color = price_size.color AND general.magazine = price_size.id
GROUP BY legend
ORDER BY coun DESC

Тут проблем никаких....
результат будет :
legend---summa
---42------6000

поехали дальше...
вот таблица скидок :

discount_vol
id-----sum----rate
42--10000-----5
42--12000-----10
42--15000-----15

sum = general.x * general.y = площадь..
IF summa > 10000 - надо 6000(100%-5%)
IF summa > 12000 - надо 6000(100%-10%),
IF summa > 15000 - надо 6000(100%-15%),
IF summa < 10000 - надо 6000 без скидок

вычитаем процентную скидку rate из суммы.. если скидки нет, не вычислять и вернуть просто сумму

вопрос - как это сделать SQL-запросом...

подозреваю использование конструкции IF

помогите плизз..
 

LeaetherStrip

Новичок
Re: Расчет из 3 таблиц с условием

Тут разве что хранимые процедуры помогут. Только, AFAIK, нет их пока в мускуле ;-) в пятом обещают

В твоем случае проще расчет суммы вынести непосредственно в PHP, а не юзать SUM( ) в мускуле
 

ForJest

- свежая кровь
Код:
mysql> set @a:=2;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT CASE 
WHEN @a>1 AND @a <10 THEN '1-10' 
WHEN @a>=10 AND @a <100 THEN  '10-100' 
WHEN @a >= 100 AND @a <1000 THEN '100-1000' 
ELSE 'error!' END result;
+--------+
| result |
+--------+
| 1-10   |
+--------+
1 row in set (0.02 sec)

mysql> set @a:=50;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT CASE 
WHEN @a>1 AND @a <10 THEN '1-10' 
WHEN @a>=10 AND @a <100 THEN  '10-100' 
WHEN @a >= 100 AND @a <1000 THEN '100-1000' 
ELSE 'error!' END result;
+--------+
| result |
+--------+
| 10-100 |
+--------+
1 row in set (0.00 sec)

mysql> set @a:=900;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT CASE 
WHEN @a>1 AND @a <10 THEN '1-10' 
WHEN @a>=10 AND @a <100 THEN  '10-100' 
WHEN @a >= 100 AND @a <1000 THEN '100-1000' 
ELSE 'error!' END result;
+----------+
| result   |
+----------+
| 100-1000 |
+----------+
1 row in set (0.00 sec)

mysql> set @a:=1;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT CASE 
WHEN @a>1 AND @a <10 THEN '1-10' 
WHEN @a>=10 AND @a <100 THEN  '10-100' 
WHEN @a >= 100 AND @a <1000 THEN '100-1000' 
ELSE 'error!' END result;
+--------+
| result |
+--------+
| error! |
+--------+
1 row in set (0.00 sec)
 
Сверху