mysql 日期 交叉表_MySQL动态交叉表

必须在准备查询时修复列的数量和名称.这就是SQL的工作方式.

所以你有两种选择来解决这个问题.两种选择都涉及编写应用程序代

(1)查询方式的不同值,然后编写代码以使用它们构造数据透视查询,在SELECT列表中添加尽可能多的列作为不同值的数量.

foreach ($pdo->query("SELECT DISTINCT `way` FROM `MyTable`") as $row) {

$way = (int) $row["way"];

$way_array[] = "MAX(IF(`way`=$way, `time`)) AS way_$way";

}

$pivotsql = "SELECT stop, " . join(", ", $way_array) .

"FROM `MyTable` GROUP BY `stop`";

现在,您可以运行新查询,并且它具有与不同方式值的数量一样多的列.

$pivotstmt = $pdo->query($sql);

(2)按照数据库中的结构逐行查询数据,然后在显示数据之前编写代码以转入列.

$stoparray = array();

foreach ($pdo->query("SELECT * FROM `MyTable`") as $row) {

$stopkey = $row["stop"];

if (!array_key_exists($stopkey, $stoparray)) {

$stoparray[$stopkey] = array("stop"=>$stopkey);

}

$waykey = "way_" . $row["way"];

$stoparray[$stopkey][$waykey] = $row["time"];

}

现在你有一个数组数组,看起来就像你运行了一个数据透视查询一样,但是你运行的实际SQL要简单得多.您将查询结果后处理为一组不同的数组.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值