2017-02-03 6 views
0

Если у меня есть таблица журналы:MySQL таблицы обновления на основе результатов из другого запроса

ID Date  P_id  TYPE 
------------------------------- 
1 2016-9-1 11 adClick  
2 2016-9-1 22 adComplete 
3 2016-9-1 11 adClick 
4 2016-9-3 22 adClick   
5 2016-9-3 22 adClick   
6 2016-9-1 11 adClick   
7 2016-9-3 22 adComplete   
8 2016-9-1 11 adClick   
9 2016-9-3 11 adClick   
------------------------------- 

и другой отчет таблицы, имеющей ту же дату & p_id следующим образом:

ID Date  P_id  clicks 
-------------------------------- 
1 2016-9-1 11  
2 2016-9-3 11  
3 2016-9-1 11   
4 2016-9-3 11  
5 2016-9-1 22  
6 2016-9-1 11   
5 2016-9-1 22   
--------------------------------- 

Мне нужно MySQL запрос на распределять клики в таблице отчетов в соответствии с ключом (ДатаP_id), а если есть остаток, добавьте один случайный случай до тех пор, пока не закончите остаток с теми же клавишами:

clicks = 
     count of rows having (Date & P_id) in logs table 
     ------------------- Divistion (/) ------------------- 
    count of rows having (Date & P_id) in Report and Type is adClick 

Количество для каждой группы с помощью клавиш (дата & p_id) и тип события adClick в таблице бревен:

2016-9-1 11 --- count--> 4 
2016-9-1 22 --- count--> 0 

2016-9-3 11 --- count--> 1 
2016-9-3 22 --- count--> 2 

И подсчитывать в отчете таблицы:

2016-9-1 11 --- count--> 3 
2016-9-1 22 --- count--> 2 

2016-9-3 11 --- count--> 2 
2016-9-3 22 --- count--> 0 

Так таблица будет до:

ID Date  P_id  clicks 
-------------------------------- 
1 2016-9-1 11  4/3 = 1 and 1 as remainder 
2 2016-9-3 11  1/2 = 0 and 1 as remainder 
3 2016-9-1 11  4/3 = 1 and 1 as remainder 
4 2016-9-3 11  1/2 = 0 and 1 as remainder 
5 2016-9-1 22  0/2 = 0 
6 2016-9-1 11  4/3 = 1 and 1 as remainder 
5 2016-9-1 22  0/2 = 0 
--------------------------------- 

Образец для более подробного объяснения, первый ряд:

2016-9-1 11  4/3 

4 rows (2016-9-1 11) in logs table with type=adClick by 
3 row (2016-9-1 11) in report table 

Я сделал часть сохранения щелчков без остатка, так что записи с моим запросом в таблице отчета являются:

ID Date  P_id  clicks 
    -------------------------------- 
    1 2016-9-1 11   1 
    2 2016-9-3 11   0 
    3 2016-9-1 11   1 
    4 2016-9-3 11   0 
    5 2016-9-1 22   0 
    6 2016-9-1 11   1 
    5 2016-9-1 22   0 
    --------------------------------- 

Теперь я хочу, чтобы распространить остаток - может быть, случайно - в отчет таблицы так, что сумма тех же ключей остается прежним:

ID Date  P_id  clicks 
    -------------------------------- 
    1 2016-9-1 11   1 + 1 
    2 2016-9-3 11   0 + 1 
    3 2016-9-1 11   1 
    4 2016-9-3 11   0 
    5 2016-9-1 22   0 
    6 2016-9-1 11   1 
    5 2016-9-1 22   0 
    --------------------------------- 

поэтому сумма кликов для (2016-9-1 11) теперь 4 для обеих таблиц.

Вот запрос я использую, чтобы обновить перед использованием остатка:

UPDATE report AS r 
    INNER JOIN 
    (
     SELECT DATE(ctr_date) as report_date, report.placement_id, count(*) as cnt_report, cnt_event_type 
     FROM report 
     INNER JOIN 
     (
      SELECT DATE(ctr_date) as event_date, placement_id, SUM(event_type = 'adClick') as cnt_event_type 
      FROM logs 
      GROUP BY DATE(ctr_date),placement_id 
     ) inner_report 

     ON report.date = inner_report.event_date AND report.placement_id = inner_report.placement_id 
     GROUP BY report.date, report.placement_id 
    ) result_table 

    ON r.date = result_table.report_date AND r.placement_id= result_table.placement_id 
    SET r.clicks = COALESCE((cnt_event_type - MOD(cnt_event_type,cnt_report))/cnt_report ,0); 

Я думал, используя тот же запрос, но с ограничением (остаточным) для тех же ключей и использования:

SET r.clicks = r.clicks + 1 
+0

Мне кажется, что это может быть проще и удобнее обслуживать либо сделать это в вашем коде, либо добавить хранимую хранимую процедуру для этого. Какой способ лучше всего зависит от вашего варианта использования. – user2120275

ответ

0

Я сохранил остатки для тех же клавиш в таблице темп. И использование этой таблицы прошло через таблицу отчетов для того же ключа и увеличило предыдущее значение в соответствии с остаточным значением из таблицы temp.

Смежные вопросы