• Как получить данные из бд?

    @ivankirshin Автор вопроса
    CREATE TEMPORARY TABLE temp1 (id int, reg1 int default 0, reg2 int default 0, reg3 int default 0, reg4 int default 0);
    /* Заполнение */
    INSERT INTO temp1 (id) VALUES ('1');
    INSERT INTO temp1 (id) VALUES ('2');
    INSERT INTO temp1 (id) VALUES ('3');
    INSERT INTO temp1 (id) VALUES ('4');
    INSERT INTO temp1 (id) VALUES ('5');
    INSERT INTO temp1 (id) VALUES ('6');
    INSERT INTO temp1 (id) VALUES ('7');
    INSERT INTO temp1 (id) VALUES ('8');
    INSERT INTO temp1 (id) VALUES ('9');
    
    SELECT t.id, coalesce(subquery.reg1, t.reg1), coalesce(subquery.reg2, t.reg2), coalesce(subquery.reg3, t.reg3), coalesce(subquery.reg4, t.reg4)
    FROM temp1 t
      LEFT JOIN
      (
        select category, sum(number*(1-abs(sign(region-1)))) as reg1,
                         sum(number*(1-abs(sign(region-2)))) as reg2,
                         sum(number*(1-abs(sign(region-3)))) as reg3,
                         sum(number*(1-abs(sign(region-4)))) as reg4
        from groups JOIN orders USING (id_order)
        WHERE datetime_order >= '$date_start' AND datetime_order <= '$date_end'
        group by category
      ) subquery ON t.id = subquery.category;
    
    DROP TABLE temp1;


    Делается через временную таблицу
    Ответ написан
    Комментировать
  • Как выполнить sql запрос?

    @ivankirshin Автор вопроса
    Решил проблему
    SELECT w.name_worker,
           w.surname_worker,
           w.midname_worker,
           w.id_worker,
           SUM(number) numb
    FROM workers w
    LEFT JOIN exhours e ON (w.id_worker = e.id_worker)
    LEFT JOIN orders o ON (e.id_order = o.id_order
                           AND o.datetime_order >= $date_start
                           AND o.datetime_order <= $date_end)
    GROUP BY w.id_worker
    Ответ написан
    Комментировать
  • Как выполнить SELECT, если количество параметров неизвестно?

    @ivankirshin Автор вопроса
    Решил проблему так:
    $query_where = array();
                if($param1) $query_where[] = "activities.name_activity = '$param1'";
                if($param2) $query_where[] = "customers.name_customer = '$param2'";
                if($paramN) $query_where[] = "paramN = `$paramN`";
                $query_where = implode(' AND ', $query_where);
                $result = mysql_query("SELECT ... WHERE $query_where ORDER BY id_order desc LIMIT $limit;") or die(mysql_error());
    Ответ написан