Объединить 2 Mysql запросов в 1 (эффективный способ) - PullRequest
1 голос
/ 23 декабря 2011

У меня есть 2 таблицы:

  1. Первый содержит данные за текущий день (за час) - эта таблица содержит необработанные данные, которые необходимо обработать.

  2. Вторая содержит данные за предыдущий день (за день) - в этой таблице уже есть значения, рассчитанные для каждого дня.

Я хочу объединить это со строками в запросе MySQL, чтобы я возвращал данные за предыдущие даты (за день) и за текущий день (снова за день).

В настоящее время я использую 2 запроса mysql:

//table 1, data for current day
                    $qry1="
            select DATE_FORMAT(completedate,'%Y-%m-%d') as date, SUM(IF(complete = 1,affpayout,0)) as pay, COUNT(*) as leads
            from leads
            where affiliateid={$_SESSION["id"]}  AND completedate>'$date' 
            GROUP BY DATE_FORMAT(completedate,'%Y-%m-%d')";
//table 2, data for previous days, already processsed, we just need to select it
            $qry2="
            select DATE(date) as date, affrevenue as pay, totalleads as leads
            from leadsdays
            GROUP BY DATE(date)";

Как я могу эффективно объединить 2 (скорость работы является проблемой)? Каков наилучший способ сделать это?

1 Ответ

1 голос
/ 23 декабря 2011

Попробуйте UNION.Также убедитесь, что ваши таблицы проиндексированы правильно.Похоже, вы захотите индексировать completedate и affiliateid как минимум.Не уверен, насколько эффективнее два запроса по сравнению с одним объединением ...

$qry = "(select 
    DATE_FORMAT(completedate,'%Y-%m-%d') as `date`, 
    SUM(IF(complete = 1,affpayout,0)) as pay, 
    COUNT(*) as leads
    from leads
    where affiliateid={$_SESSION["id"]}  AND completedate>'$date' 
    GROUP BY DATE_FORMAT(completedate,'%Y-%m-%d')) 
    UNION 
    (select 
    DATE(`date`) as `date`, 
    affrevenue as pay, 
    totalleads as leads
    from leadsdays
    GROUP BY DATE(`date`)) 
    ORDER BY DATE(`date`)";
...