2015-07-10 142 views
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 
       ) 
     ) 
) 
*/ 
+2

php會成爲答案,因爲除了你的'$ row'指針所指向的單個行以外,mysql並不真正支持數組的創建。 –

+0

您可以使用[獲取所有](http://php.net/manual/en/mysqli-result.fetch-all.php),但它只會讓你在那裏。 –

回答

2

你應該能夠稍微改變你的Select語句來使處理更容易:

$select = $mysqli->query(" 
    SELECT users.username, 
    users.emailaddress, 
    users.firstname, 
    users.lastname, 
    users.dateofbirth, 
    events.event_label, 
    events.timestamp 
    FROM users 
    LEFT JOIN events ON users.id=events.user  
    WHERE users.id=$id 
"); 

,然後修改您的while循環,使你在PHP中獲取多維數組

while ($row = $select->fetch_assoc()) { 
    $result[[$row['id']] = $row; 
}