gpt4 book ai didi

php - MySQL 根据另一个查询的结果更新表

转载 作者:行者123 更新时间:2023-11-29 19:27:29 26 4
gpt4 key购买 nike

如果我有表日志:

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

最佳答案

我将相同键的余数保存在临时表中。并使用该表遍历报告表中的相同键,并根据临时表中的余数值增加先前的值。

关于php - MySQL 根据另一个查询的结果更新表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42034250/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com