Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обьединение двух запросов 
:(
    Опции темы
MrDmitry
Дата 28.7.2011, 22:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 556
Регистрация: 10.11.2006

Репутация: нет
Всего: нет



Здраствуйте. Помогите решить следующий вопрос. 

Есть следующий код


Код

function detalizeForDays()
{
    global $db,$core;
    $sql = "SELECT 
                    SUM(o.amount) AS `total_amount`, 
                    SUM(oa1.amount) AS `cash`,
                    SUM(oa2.amount) AS `bonus_on`, 
                    SUM(oa4.amount) AS `bonus_off`, 
                    SUM(oa3.amount) AS `discount`,
          oa5.amount as `percent`,  
                    COUNT(DISTINCT o.id) AS `operation_count`, 
                    DATE_FORMAT(o.date,'%d.%m.%Y') AS `dat`,
                    DATE_FORMAT(o.date, '%y.%m.%d') AS `date_format`, 
                    DATE_FORMAT(o.date, '%d.%m.%Y') AS `date_format_rev` 
                        FROM `operation` AS `o`
                 LEFT JOIN `operation_action` AS `oa1` ON oa1.operation_id=o.id AND oa1.type=4
                 LEFT JOIN `operation_action` AS `oa2` ON oa2.operation_id=o.id AND oa2.type=1
                 LEFT JOIN `operation_action` AS `oa4` ON oa4.operation_id=o.id AND oa4.type=2
                 LEFT JOIN `operation_action` AS `oa3` ON oa3.operation_id=o.id AND oa3.type=3
         LEFT JOIN `operation_action` AS `oa5` ON oa5.operation_id=o.id AND oa5.type=8    
                WHERE (o.brand_id=:brand_id) AND (DATE(o.date) >= :date_begin AND DATE(o.date) <= :date_end)
                GROUP BY `date_format` 
                ORDER BY `date_format` ASC;";
    $sql = $db->prepare($sql);
    $begin_date = $_POST['date_begin'];
    $end_date =  $_POST['date_end'];
    $sql->bindParam(':date_begin',encodeDate($begin_date),PDO::PARAM_STR);
    $sql->bindParam(':date_end',encodeDate($end_date),PDO::PARAM_STR);
    $sql->bindParam(':brand_id',$core->user['id'],PDO::PARAM_INT);

    $sql->execute();
    //print_r($sql->errorInfo());
    $data = $sql->fetchAll(PDO::FETCH_ASSOC);

    $data = date_array_mergre(array($data,getNewCardsArrayDays(array($begin_date,$end_date))));
    $res = "<table>
                <tr style='background-color: rgb(000, 250, 000)';>
                    <th>Дата</th>
                        <th>Количество операций</th>
                        <th>Общая сумма операций</th>
                        <th>Оплата наличными</th>
                        <th>Скидка</th>
                        <th>Бонусов начисленно</th>
                        <th>Бонусов списано</th>
                        <th>Выдано карт</th>
                        <th>&nbsp;&nbsp;</th>
                </tr>";
            
    foreach ($data as $day)
    {    
  $bonus_on=$day['cash']*$day['percent']/100 + $day['bonus_on'];                                            
        $res .='<tr style="background-color: rgb(000, 250, 000);">
                        <td>'.$day['dat'].'</td>
                        <td>'.$day['operation_count'].'</td>
                        <td>'.$day['total_amount'].'</td>
                        <td>'.$day['cash'].'</td>
                        <td>'.$day['discount'].'</td>
                        <td>'.$bonus_on.'</td>
                        <td>'.$day['bonus_off'].'</td>
                        <td>'.$day['cards_count'].'</td>
                        <td class="onDayUpTd up" onclick="return detalizeOnDay(\''.$day['dat'].'\',this);"></td>
                    </tr>';

    }
    $res .= "</table>";
    print $res;
}

function getNewCardsArrayDays($time)
{
        global $db,$core;
        $sql = "SELECT 
                    COUNT(c.id) AS `cards_count`,
                    DATE_FORMAT(c.date, '%y.%m.%d') AS `date_format`
                FROM 
                    `card` AS `c`
                WHERE 
                    c.group_id=:brand_id 
                AND 
                    DATE(c.date) >=:date_begin 
                AND 
                    DATE(c.date) <=:date_end
                GROUP BY `date_format` 
                ORDER BY `date_format` ASC;
                ";
            

        $sql = $db->prepare($sql);
        $sql->bindParam(':date_begin',encodeDate($time[0]),PDO::PARAM_STR);
        $sql->bindParam(':date_end',encodeDate($time[1]),PDO::PARAM_STR);
        $sql->bindParam(':brand_id',$core->user['id'],PDO::PARAM_INT);
        $sql->execute();

        //print_r($sql->errorInfo());
        return $sql->fetchAll(PDO::FETCH_ASSOC);
}
    
    // merge array of date
    function date_array_mergre($data)
    {
        $cnt = 0;
        foreach ($data[0] as $k => $v)
        {
            if ($data[0][$k]['date_format'] == $data[1][$cnt]['date_format'])
            { 
                $data[0][$k] = array_merge($data[0][$k],$data[1][$cnt]);
                $cnt++;
            }
        }
        return $data[0];
    }

            
     function encodeDate($s) {
        return preg_replace("/([0-9]{2})\.([0-9]{2})\.([0-9]{4})/", "$3-$2-$1", $s);
    }


Проблема в том что выводятся данные по картам не для всех brand_id. Ломаю голову над этим уже целый день.  Если оба sql запроса я выполняю в одной функции. То все норм. Но как обьeдинить выборки sql запросов в одном массиве?

Это сообщение отредактировал(а) MrDmitry - 28.7.2011, 22:13
PM MAIL   Вверх
ayax2005
Дата 29.7.2011, 08:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


echo $smile
**


Профиль
Группа: Участник
Сообщений: 516
Регистрация: 17.4.2008
Где: Питер

Репутация: 2
Всего: 11



ээээ... UNION?


--------------------
все вопросы - из-за неверной формулировки задачи
PM MAIL ICQ   Вверх
MrDmitry
Дата 29.7.2011, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 556
Регистрация: 10.11.2006

Репутация: нет
Всего: нет



В ветке базы данных мне сказали что UNION не поможет и что мне в раздел php 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0996 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.