0
有沒有辦法運行一個 mysql查詢並獲取多維數組?從數據庫提取多維數組
例如,假設您有特定的用戶,並且您想要獲取該用戶的數據以及該用戶的最近事件/活動。
表結構會是這樣的:
users
表:
ID | username | emailaddress | firstname | lastname | dateofbirth
events
表:
ID | user | event_label | timestamp
有當然可以只一個單que用戶,但該用戶可能有多個事件。因此,如果我在這兩個表上執行LEFT JOIN
,則必須使用while循環來獲取所有事件行。但是,在每次迭代中,我將再次從users
表中獲取相同的數據。
例如,用於查詢的代碼可能是這樣的:
$mysqli = new mysqli(HOST, USER, PASSWORD, DATABASE);
$id = 123456;
$select = $mysqli->query("
SELECT users.*, events.event_label, events.timestamp
FROM users
LEFT JOIN events ON users.id=events.user
WHERE users.id=$id
");
while ($row = $select->fetch_assoc()) {
$result[] = $row;
}
echo "<pre>";
print_r($result);
exit("</pre>");
/*
Sample output:
Array (
[0] => Array
(
[id] => 1
[username] => name
[emailaddress] => [email protected]
[firstname] => Joe
[lastname] => Test
[dateofbirth] => 2015-07-10
[event_label] => Subscribe
[timestamp] => 2015-07-10 00:00:00
)
[1] => Array
(
[id] => 1
[username] => name
[emailaddress] => [email protected]
[firstname] => Joe
[lastname] => Test
[dateofbirth] => 2015-07-10
[event_label] => Visit
[timestamp] => 2015-07-10 01:00:00
)
[2] => Array
(
[id] => 1
[username] => name
[emailaddress] => [email protected]
[firstname] => Joe
[lastname] => Test
[dateofbirth] => 2015-07-10
[event_label] => phonecall
[timestamp] => 2015-07-10 03:00:00
)
)
*/
期望的結果會是這樣的下面。我知道我可以重新排列PHP中的數據,但我想知道是否可以用MySQL來實現。
/*
Desired output:
Array (
[0] => Array (
[id] => 1
[username] => name
[emailaddress] => [email protected]
[firstname] => Joe
[lastname] => Test
[dateofbirth] => 2015-07-10
[events] => Array (
[0] => Array (
[event_label] => Subscribe
[timestamp] => 2015-07-10 00:00:00
)
[1] => Array (
[event_label] => Visit
[timestamp] => 2015-07-10 01:00:00
)
[2] => Array (
[event_label] => phonecall
[timestamp] => 2015-07-10 03:00:00
)
)
)
*/
php會成爲答案,因爲除了你的'$ row'指針所指向的單個行以外,mysql並不真正支持數組的創建。 –
您可以使用[獲取所有](http://php.net/manual/en/mysqli-result.fetch-all.php),但它只會讓你在那裏。 –