Подсчет стоимость периода из БД

DenIceS

Новичок
Подсчет стоимость периода из БД

Есть заданный период: 01.01.2008 (переменная date1) - 10.01.2008 (переменная date2).

Есть БД с заданными периодами:
01.01.2008 - 05.01.2008: 50 у.е за сутки.
06.01.2008 - 15.01.2008: 60 у.е за сутки.
16.01.2008 - 05.03.2008: 85 у.е за сутки.
и.т.д.

Необходимо посчитать стоимость заданного периода (для текущего примера - 550 у.е)

Подскажите, или без лишних вопросов примите на аутсорсинг (цена вопроса?)

P.S: я программист с опытом, и я убедительно попрошу всех "умных-разумных", норовящих вставить свои пять копеек с упреком и нареканием в каждом топике - воздержаться от постинга. Только конкретные уточнения, советы и предложения по цене. Спасибо
 

Wicked

Новичок
написать 10 строчек кода опытному программисту сложнее, чем ввязываться в аутсорсинг (проверка кандидата на адекватность, переговоры о цене, возня с оплатой, риски, ...)?
 

berkut

Новичок
а какие требования? только на sql без php? хранимые процедуры катят?

-~{}~ 25.02.08 19:58:

сделаю запросом за $40 ;)
 

DenIceS

Новичок
Wicked
вы не ознакомились с последним предложением в моем сообщении. Мне не сложно процитировать:

Только конкретные уточнения, советы и предложения по цене.
berkut
Спасибо за Ваш ответ. Требование: необходима функция, которой на входе приходит три параметра: id, date1, date2. В id хранится идентификатор периодов (по нему нужно получить список периодов из БД (select * from period WHERE ident=$id)), в date1 хранится начальная дата, в date2 - конечная. Возвращать функция должна стоимость за указанный период.
 

berkut

Новичок
ну сумму я уже озвучил. 100% предоплата - и сделаю сегодня
 

Gas

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

DenIceS

Новичок
Автор оригинала: Beavis
покажи хоть как написали :)
PHP:
function calculateCost($ownerdent, $day_start, $month_start, $year_start, $day_end, $month_end, $year_end, $calc_both = false)
{    
    $ownerdent = mysql_escape_string($ownerdent);
    if ($calc_both)
        $field = '(cost_main + cost_dop)';
    else
        $field = 'cost_main';
    $start_date = mysql_escape_string($year_start . '-' . $month_start . '-' . $day_start);
    $end_date = mysql_escape_string($year_end . '-' . $month_end . '-' . ($day_end-1));
    $sql = "SELECT SUM({$field} * (DATEDIFF(
                IF (DATE(CONCAT_WS('-', end3, end2, end1)) > '$end_date'
                    , '$end_date',  DATE(CONCAT_WS('-', end3, end2, end1))),
                IF (DATE(CONCAT_WS('-', start3, start2, start1)) > '$start_date'
                    , DATE(CONCAT_WS('-', start3, start2, start1)), '$start_date')) + 1)) AS cost
            FROM cost 
            WHERE ownerdent = '$ownerdent' 
                AND DATE(CONCAT_WS('-', start3, start2, start1)) <= '$end_date'
                AND DATE(CONCAT_WS('-', end3, end2, end1)) > '$start_date'";
    $res = mysql_query($sql) or die(mysql_error());
    $row = mysql_fetch_assoc($res);
    return (int) $row['cost'];
}
 

Beavis

Banned
не, я просто из интереса тоже быстренько накидал...
хотел сравнить
PHP:
<?php

$d1 = '2008-01-01';
$d2 = '2008-01-10';
$link = mysql_connect('localhost', '', '');
mysql_select_db('test', $link);

$sql = "
SELECT SUM(`price` * 
CASE
	WHEN '$d1' >= `date1` AND '$d2' <= `date2` 
		THEN DATEDIFF('$d2', '$d1')+1
	WHEN '$d1' >= `date1` 
		THEN DATEDIFF(`date2`, '$d1')+1
	WHEN '$d2' <= `date2` 
		THEN DATEDIFF('$d2', `date1`)+1
	ELSE 
		DATEDIFF(`date2`, `date1`)+1
	END) AS `cost` 
FROM `periods` 
WHERE '$d1' < `date2` AND '$d2' > `date1`
";
	
$res = mysql_query($sql, $link);
if (!$res) die(mysql_error($link));
echo mysql_fetch_object($res)->cost;
mysql_close($link);

?>
 

berkut

Новичок
те-же яйца, вид сбоку) тока там даты в start3, start2, start1 - дд, мм, гггг - все в varchar(255)
 
Сверху