Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Условие в алгоритме

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
pantela
Отправлено: 09 Июля, 2013 - 00:40:56
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 765
Дата рег-ции: Авг. 2010  


Помог: 1 раз(а)




Делаю в MySQL алгоритм, в котором имеется условие.
Цитата:
Если поле "f2" меньше или равно 0, тогда f14 == f12, иначе f14 == (f12-f13)+f7;

f2:
CODE (htmlphp):
скопировать код в буфер обмена
  1. ((b.auction_pay+b.inside_transport_usa+b.container_amount+b.diler+b.services+b.transfer_charges+b.late_payment+b.load_fee+b.storeg_fee+b.other_service+((b.auction_pay+b.inside_transport_usa+b.container_amount+b.services+b.transfer_charges+b.late_payment+b.load_fee+b.storeg_fee+b.other_service)*b.insurance_votes/100)+b.consolidation_fee)-consolidation_fee)-(pm_1+transfer_fee_1+pm_2+pm_3+pm_4+pm_5) AS f2,



f12:
CODE (htmlphp):
скопировать код в буфер обмена
  1. (b.pm_1+b.transfer_fee_1+b.pm_2+b.pm_3+b.pm_4+b.pm_5)-((b.auction_real_pay+b.transfer_charges)+(b.transfer_money_2_stage+b.transfer_money_3_stage+b.transfer_money_4_stage+b.transfer_money_5_stage)) AS f12,




f13:
CODE (htmlphp):
скопировать код в буфер обмена
  1. ((b.auction_pay+b.inside_transport_usa+b.container_amount+b.diler+b.services+b.transfer_charges+b.late_payment+b.load_fee+b.storeg_fee+b.other_service+((b.auction_pay+b.inside_transport_usa+b.container_amount+b.services+b.transfer_charges+b.late_payment+b.load_fee+b.storeg_fee+b.other_service)*b.insurance_votes/100)+b.consolidation_fee)-b.consolidation_fee)-(b.pm_1+b.transfer_fee_1+b.pm_2+b.pm_3+b.pm_4+b.pm_5) AS f13,



f7:
CODE (htmlphp):
скопировать код в буфер обмена
  1. ((b.auction_real_pay+b.price_for_towing+b.container_amount+b.diler+b.transfer_charges+b.late_payment+b.load_fee+b.storeg_fee+b.other_service)+((b.auction_pay+b.inside_transport_usa+b.container_amount+b.services+b.transfer_charges+b.late_payment+b.load_fee+b.storeg_fee+b.other_service)*b.insurance_votes/100))-((b.auction_real_pay+b.transfer_charges)+(b.transfer_money_2_stage+b.transfer_money_3_stage+b.transfer_money_4_stage+b.transfer_money_5_stage)) AS f7,



Вот как построить условие для F14 не пойму, т.к. очень много полей и запутался вроде, но при разборе получилось так, но что то не то...
CODE (htmlphp):
скопировать код в буфер обмена
  1. (IF(((b.auction_pay+b.inside_transport_usa+b.container_amount+b.diler+b.services+b.transfer_charges+b.late_payment+b.load_fee+b.storeg_fee+b.other_service+((b.auction_pay+b.inside_transport_usa+b.container_amount+b.services+b.transfer_charges+b.late_payment+b.load_fee+b.storeg_fee+b.other_service)*b.insurance_votes/100)+b.consolidation_fee)-b.consolidation_fee)-(b.pm_1+b.transfer_fee_1+b.pm_2+b.pm_3+b.pm_4+b.pm_5)<=0,((b.pm_1+b.transfer_fee_1+b.pm_2+b.pm_3+b.pm_4+b.pm_5)-((b.auction_real_pay+b.transfer_charges)+(b.transfer_money_2_stage+b.transfer_money_3_stage+b.transfer_money_4_stage+b.transfer_money_5_stage)))))+((b.auction_real_pay+b.price_for_towing+b.container_amount+b.diler+b.transfer_charges+b.late_payment+b.load_fee+b.storeg_fee+b.other_service)+((b.auction_pay+b.inside_transport_usa+b.container_amount+b.services+b.transfer_charges+b.late_payment+b.load_fee+b.storeg_fee+b.other_service)*b.insurance_votes/100))-((b.auction_real_pay+b.transfer_charges)+(b.transfer_money_2_stage+b.transfer_money_3_stage+b.transfer_money_4_stage+b.transfer_money_5_stage)) AS f14,

P.S. тут я даже сразу + F7 написал, не знаю как писал else тут... Огорчение

Помогите думаю гуру нужен Недовольство, огорчение спс.Ув.

(Отредактировано автором: 09 Июля, 2013 - 00:45:01)

 
 Top
Мелкий Супермодератор
Отправлено: 09 Июля, 2013 - 13:47:32
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Пишите лучше хранимку или генерируйте этот запрос из приложения. Так - сплошной рассадник проблем будет.
Разбейте построение запроса на внятные, читаемые условия.


-----
PostgreSQL DBA
 
 Top
pantela
Отправлено: 09 Июля, 2013 - 14:11:49
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 765
Дата рег-ции: Авг. 2010  


Помог: 1 раз(а)




Как это сделатья не знаю... прошлый прогер так сделал. в view в mysql впихнул весь алгоритм... вот и я продолжнаю по этому принцыпу другие условия строить.

Пример читаимости привёл вроде по отдельности. или что вы имеете виду Растерялся Огорчение
 
 Top
Мелкий Супермодератор
Отправлено: 09 Июля, 2013 - 14:47:08
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




PHP:
скопировать код в буфер обмена
  1. $f2 = "((b.auction_pay+b.inside_transport_usa+b.container_amount+b.diler+b.services+b.transfer_charges+b.late_payment+b.load_fee+b.storeg_fee+b.other_service+((b.auction_pay+b.inside_transport_usa+b.container_amount+b.services+b.transfer_charges+b.late_payment+b.load_fee+b.storeg_fee+b.other_service)*b.insurance_votes/100)+b.consolidation_fee)-consolidation_fee)-(pm_1+transfer_fee_1+pm_2+pm_3+pm_4+pm_5)";
  2.  
  3. $f12 = "(b.pm_1+b.transfer_fee_1+b.pm_2+b.pm_3+b.pm_4+b.pm_5)-((b.auction_real_pay+b.transfer_charges)+(b.transfer_money_2_stage+b.transfer_money_3_stage+b.transfer_money_4_stage+b.transfer_money_5_stage))";
  4.  
  5. $f13 = "((b.auction_pay+b.inside_transport_usa+b.container_amount+b.diler+b.services+b.transfer_charges+b.late_payment+b.load_fee+b.storeg_fee+b.other_service+((b.auction_pay+b.inside_transport_usa+b.container_amount+b.services+b.transfer_charges+b.late_payment+b.load_fee+b.storeg_fee+b.other_service)*b.insurance_votes/100)+b.consolidation_fee)-b.consolidation_fee)-(b.pm_1+b.transfer_fee_1+b.pm_2+b.pm_3+b.pm_4+b.pm_5)";
  6.  
  7. $f7 = "((b.auction_real_pay+b.price_for_towing+b.container_amount+b.diler+b.transfer_charges+b.late_payment+b.load_fee+b.storeg_fee+b.other_service)+((b.auction_pay+b.inside_transport_usa+b.container_amount+b.services+b.transfer_charges+b.late_payment+b.load_fee+b.storeg_fee+b.other_service)*b.insurance_votes/100))-((b.auction_real_pay+b.transfer_charges)+(b.transfer_money_2_stage+b.transfer_money_3_stage+b.transfer_money_4_stage+b.transfer_money_5_stage))";
  8.  
  9. $f14 = "if($f2, $f12, ($f12-$f13)+$f7)";
  10.  
  11. $sql = "select $f14 as f14 from атата"


Раскидать по нормальным именам переменных, раскидать эти жуткие нагромождения во что-нибудь однозначное - они же дублируют друг друга.

Или сделать SQL-функции, которые будут знать обо всех этих хитросплетениях. И пинать эти функции.
(Добавление)
Вьюха - пусть будет вьюха. Но генерируйте её код отдельно. Так, чтобы можно было прочитать и без затруднений понять, что тут происходит.


-----
PostgreSQL DBA
 
 Top
VenZell
Отправлено: 09 Июля, 2013 - 16:40:37
Post Id


Частый гость


Покинул форум
Сообщений всего: 237
Дата рег-ции: Июнь 2013  


Помог: 12 раз(а)




Чуть не свихнулся с этими скобками. Еще непонятно, можно их убирать или нет... В общем, обязательно тестировать и проверять это чудо. Но так оно хоть читаемо стало...
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.  
  4. function bFicator($string) {
  5.     $array = explode('+', $string);
  6.     foreach ($array as $k => $v) {
  7.         $array[$k] = 'b.' . $v;
  8.     }
  9.     return implode('+', $array);
  10. }
  11.  
  12. $transport = "b.transfer_charges+b.price_for_towing";
  13. $transport_usa = "b.transfer_charges+b.inside_transport_usa";
  14.  
  15. $container_fee = "b.container_amount+b.load_fee+b.storeg_fee";
  16. $risk_fee = "b.late_payment+b.other_service";
  17.  
  18. $road_fee = "$transport+$container_fee+$risk_fee";
  19. $road_fee_usa = "$transport_usa+$container_fee+$risk_fee";
  20.  
  21. $insurance = "b.insurance_votes/100";
  22. $amortization = "((b.auction_pay+b.services+$road_fee_usa)*$insurance)";
  23. $b_tm = "b.transfer_money_";
  24. $b_transfer_money = "{$b_tm}2_stage+{$b_tm}3_stage+{$b_tm}4_stage+{$b_tm}5_stage";
  25. $pm = "pm_1+pm_2+pm_3+pm_4+pm_5";
  26. $b_pm = bFicator($pm);
  27. $payment = "(b.diler+$road_fee+b.auction_real_pay)+$amortization";
  28. $payment_usa = "b.diler+$road_fee_usa+b.auction_pay+$amortization";
  29. $another_fee = "b.services+b.consolidation_fee";
  30.  
  31.  
  32. $f2 = "(($payment_usa+$another_fee)-consolidation_fee)-(transfer_fee_1+$pm)";
  33. $f13 = "(($payment_usa+$another_fee)-b.consolidation_fee)-(b.transfer_fee_1+$b_pm)";
  34. $f12 = "(b.transfer_fee_1+$b_pm)-((b.auction_real_pay)+($b_transfer_money))";
  35. $f7 = "($payment)-((b.auction_real_pay+b.transfer_charges)+($b_transfer_money))";
  36. $f14 = "if($f2, $f12, ($f12-$f13)+$f7)";
  37. $sql = "select $f14 as f14 from атата";

(Отредактировано автором: 09 Июля, 2013 - 16:49:34)

 
 Top
pantela
Отправлено: 10 Июля, 2013 - 01:55:33
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 765
Дата рег-ции: Авг. 2010  


Помог: 1 раз(а)




спс, большое вам сделал по своему опять же. получилось так.
CODE (htmlphp):
скопировать код в буфер обмена
  1. (IF(-1*(((b.auction_pay+b.inside_transport_usa+b.container_amount+b.diler+b.services+b.transfer_charges+b.late_payment+b.load_fee+b.storeg_fee+b.other_service+((b.auction_pay+b.inside_transport_usa+b.container_amount+b.services+b.transfer_charges+b.late_payment+b.load_fee+b.storeg_fee+b.other_service)*b.insurance_votes/100)+b.consolidation_fee)-b.consolidation_fee)-(b.pm_1+b.transfer_fee_1+b.pm_2+b.pm_3+b.pm_4+b.pm_5))<'0',(b.pm_1+b.transfer_fee_1+b.pm_2+b.pm_3+b.pm_4+b.pm_5)-((b.auction_real_pay+b.transfer_charges)+(b.transfer_money_2_stage+b.transfer_money_3_stage+b.transfer_money_4_stage+b.transfer_money_5_stage)),(b.pm_1+b.transfer_fee_1+b.pm_2+b.pm_3+b.pm_4+b.pm_5)-((b.auction_real_pay+b.transfer_charges)+(b.transfer_money_2_stage+b.transfer_money_3_stage+b.transfer_money_4_stage+b.transfer_money_5_stage))-(-1*(((b.auction_pay+b.inside_transport_usa+b.container_amount+b.diler+b.services+b.transfer_charges+b.late_payment+b.load_fee+b.storeg_fee+b.other_service+((b.auction_pay+b.inside_transport_usa+b.container_amount+b.services+b.transfer_charges+b.late_payment+b.load_fee+b.storeg_fee+b.other_service)*b.insurance_votes/100)+b.consolidation_fee)-b.consolidation_fee)-(b.pm_1+b.transfer_fee_1+b.pm_2+b.pm_3+b.pm_4+b.pm_5)))))+((b.auction_real_pay+b.price_for_towing+b.container_amount+b.diler+b.transfer_charges+b.late_payment+b.load_fee+b.storeg_fee+b.other_service)+((b.auction_pay+b.inside_transport_usa+b.container_amount+b.services+b.transfer_charges+b.late_payment+b.load_fee+b.storeg_fee+b.other_service)*b.insurance_votes/100))-((b.auction_real_pay+b.transfer_charges)+(b.transfer_money_2_stage+b.transfer_money_3_stage+b.transfer_money_4_stage+b.transfer_money_5_stage)) AS f14,

Понимаю что код большой и не читаемый, но я не знаю как вынести его за пределами вюхи, т.к. она же мне выводить данный в jQueryGrid Растерялся
Ну работает так пускай, пока не сломается Закатив глазки

спс.Ув.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB