【问题标题】:Creating new temporary tables in mysql from selecting two table using PHP通过使用 PHP 选择两个表在 mysql 中创建新的临时表
【发布时间】:2015-04-09 07:03:59
【问题描述】:

我有两张表,其中包含不同的字段,并且只有一个公共字段作为主键/外键。如何在其中创建包含新字段的临时表,同时从两个现有表中选择一些字段?我需要在创建临时表后插入一次值。

情况 1:当我需要从两个现有表中单击生成一些报告时,我需要这样做,例如创建表,如果不存在,则在其中插入值,必须产生结果。只需单击一下即可完成所有操作。

情况2:我在表2中有rank字段。根据rank字段,可以在新的临时表中创建新字段。例如:如果 rank>1101

情况 3:如果选择查询生成记录数,那么我想将其插入一行本身,而不会产生太多行

例如:

如果我按照以下方式产生一些结果

日期排名
11-01-2015 11
11-01-2015 120
11-01-2015 210

我需要以这样一种方式创建临时表,以将所有排名与其中只有一个日期字段以及 rank1=11、rank2=120 和 rank3=210 结合起来

然后我可以在单个查询中通过日期获得所有排名。

【问题讨论】:

  • 编写一个查询,返回您需要的数据。然后使用CREATE TEMPORARY TABLE tablename AS SELECT ... 将查询放在最后。
  • 请考虑我的情况2。告诉我如何用它创建表
  • 您需要编写动态 SQL 来执行此操作。但是为什么要在临时表中使用不同的列名,如何知道查询时要使用哪一列呢?如果你需要这样做,你可能做错了。
  • 我什至不确定我是否理解情况 2。表的不同行不能有不同的字段名称。也许您对我的解释不够清楚。显示一些示例输入以及您希望临时表的外观。
  • 我也不懂#3。请举例说明。如果你想合并多行的数据,也许你正在寻找GROUP_CONCAT

标签: php mysql database


【解决方案1】:

情况2:

CREATE TEMPORARY TABLE tablename AS
SELECT date, 
       MAX(CASE WHEN rank BETWEEN 1 AND 100 THEN rank END) AS rank1,
       MAX(CASE WHEN rank BETWEEN 101 AND 200 THEN rank END) AS rank2,
       MAX(CASE WHEN rank BETWEEN 201 AND 300 THEN rank END) AS rank3,
       MAX(CASE WHEN rank > 300 THEN rank END) AS rank4
FROM table2
GROUP BY date

【讨论】:

  • 创建此表后是否可以获得结果?
  • 我不明白你的意思。得到什么结果?
  • 选择表格并显示
  • SELECT * FROM tablename
  • 我希望合并具有 NULL 值的字段。我怎样才能做到这一点?
猜你喜欢
  • 1970-01-01
  • 2013-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-15
  • 2013-03-01
  • 1970-01-01
相关资源
最近更新 更多