我有 3 个表 Channels、DateSelection 和 History。 Channels 和 DateSelection 会根据需要更新,通常如下所示 channel 表-
CHID CHNAME CHLOC
1 BARRY NULL
2 TOM NULL
3 SHIRLY NULL
日期选择表
WEEKCOMMENCING WEEKENDING
01/01/2014 03/01/2014
历史记录 为空列 - channel - 日期 - 用户
我想做的是运行一个查询或触发 mysql 或 php 等来生成行
Channel - Date - User
Barry 01/01/2014
Barry 02/01/2014
Barry 03/01/2014
Tom 01/01/2014
Tom 02/01/2014
Tom 03/01/2014
Shirly 01/01/2014
Shirly 02/01/2014
Shirly 03/01/2014
基本上所有可能的组合?
我已经在 View 中处理了以下内容。独立完成每一天
插入历史记录
(域名,日期)
SELECT Channels.CHNAME, FCCURRENTDATES.DATE
来自 channel
交叉连接 FCCURRENTDATES
然而,这会不断创建重复项。我可以添加什么 CHNAME 和 DATE 的每个匹配组合中只有 1 个
有人可以帮我吗?我不介意一天一次地做,但实际上有一个 cpl 一百个 channel 。谢谢!
最佳答案
这应该可以解决问题:
SELECT CHNAME AS Channel, a.Date, '' AS User
FROM Channels c
JOIN DateSelection ds
JOIN (
select curdate() + INTERVAL 100 DAY - INTERVAL (a.a + (10 * b.a) + (100 * c.a)) DAY as Date
from (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as a
cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as b
cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as c
) a ON a.Date BETWEEN ds.WEEKCOMMENCING AND ds.WEEKENDING
ORDER BY CHID, a.Date
参见 sqlfiddle - http://sqlfiddle.com/#!2/87a5f/19
请注意,您可能会根据您是展望 future 还是过去来调整选择的日期范围。现在范围是 curdate 前 900 天和 curdate 后 100 天。根据需要进行调整。
关于php - MySQL 自动生成所有可能的组合作为行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20877033/