php - MySQL 自动生成所有可能的组合作为行

标签 php mysql

我有 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/

相关文章:

php - 多数据库模式迁移(php/mysql)

php - 我可以在 1 个 php 文件中包含多个 SQL SELECT 查询吗?

javascript - PHP 正在插入特殊字符,例如在数据库表中

php - 我怎样才能用 div 设置这个 php 的样式?

php - 如何在 Laravel 中切换一个信号键以将推送通知发送到不同的帐户

php - 在每个产品 ID/WP 的 WooCommerce 产品价格后添加文本

java - mysql 和 javax.naming.NamingException

php - 在 Laravel Forge 上卸载 MySQL 而不删除 HHVM

MySQL UNION 语句中的 Order By

c# - MySql 查看用户是否被禁止 C# Windows Form