【发布时间】:2019-04-30 12:15:01
【问题描述】:
假设,我有一个事件表,我想获取某一天的所有事件(例如 2018-01-02)
| e1 | d1 | e2 | d2 | e3 | d3 |
----------------------------------------------------------------------
| event A | 2018-01-01 | event B | 2018-01-02 | event C | 2018-01-02 |
| event D | 2018-01-01 | NULL | NULL | NULL | NULL |
| NULL | NULL | event E | 2018-01-02 | event F | 2018-01-03 |
问题是当我尝试获取这样的结果时:
"SELECT * FROM table WHERE d1='2018-01-02' OR d2='2018-01-02' OR d3='2018-01-02' "
我得到了整行结果(在这种情况下 - 所有三行)。 但我想获得带有事件和日期的单独结果数组。像这样:
Array
(
[0] => Array
(
event => event B
date => 2018-01-02
)
[1] => Array
(
event => event C
date => 2018-01-02
)
)
就目前而言,我以这种丑陋的方式做到了,执行 3 个查询并加入它们的结果:
$Sql=$conn->prepare("SELECT e1 AS event, d1 AS date FROM table WHERE d1='2018-01-02'");
$Sql->execute();
$Arr1 = $Sql->fetchAll(PDO::FETCH_ASSOC);
$Sql=$conn->prepare("SELECT e2 AS event, d2 AS date FROM table WHERE d2='2018-01-02'");
$Sql->execute();
$Arr2 = $Sql->fetchAll(PDO::FETCH_ASSOC);
$Sql=$conn->prepare("SELECT e3 AS event, d3 AS date FROM table WHERE d3='2018-01-02'");
$Sql->execute();
$Arr3 = $Sql->fetchAll(PDO::FETCH_ASSOC);
$Arr=array();
foreach($Arr1 AS $a){
$Arr[]=array($a['event'],$a['date']);
}
foreach($Arr2 AS $a){
$Arr[]=array($a['event'],$a['date']);
}
foreach($Arr3 AS $a){
$Arr[]=array($a['event'],$a['date']);
}
print_r($Arr);
但我确信应该有一些更充分的方法来做到这一点。通过修改 SQL 或 PHP。 提前致谢。
【问题讨论】:
-
也许用 Union 语句做三个查询 ;)