簡體   English   中英

PHP MySQL從同一結果行中將列提取為不同的數組

[英]PHP MySQL fetching columns as different arrays from the same results row

假設我有一個事件表,並且想獲取某天的所有事件(例如2018年1月2日)

|   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。 提前致謝。

看看https://dev.mysql.com/doc/refman/5.7/en/union.html嘗試這樣的事情

$Sql=$conn->prepare("(SELECT e1 AS event, d1 AS date FROM table WHERE d1='2018-01-02') UNION (SELECT e2 AS event, d2 AS date FROM table WHERE d2='2018-01-02') UNION (SELECT e3 AS event, d3 AS date FROM table WHERE d3='2018-01-02') ");
$Sql->execute();
$Arr = $Sql->fetchAll(PDO::FETCH_ASSOC);

還請注意,日期是保留字,因此您可能需要用回勾號寫出來……不過不確定,因為我只是不使用它們;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM