2014-06-13 51 views
1

如果我有一個表,看起來像這樣:返回多維數組的MySQL數據庫搜索?

user | language 
-----|--------- 
john | english 
john | french 
john | spanish 

有一個查詢,我可以運行,這樣我回去:我試圖避免沿做一些

["john"=>["english", "french", "spanish"]] 

的行:

$john->languages = array(); 
foreach($results as $row){ 
    array_push($john->languages, $row["language"]); 
} 
+0

Mysql不會返回'數組',可以這麼說 - 它返回'行' - 這對於所有意圖和目的都是'數組',但無法獲得包含其他行的行 - 或者多維數組。你堅持使用PHP來創建一個多維數組,由mysql返回的一維行。 –

+0

@MarkM,這就是我所害怕的。當我想到這一點時,我正要做到這一點,並意識到它效率非常低,希望有更好的方法。 –

+0

我不認爲這樣做效率低下 - 在下面使用Fabricator的方法看起來很標準。然而,看看巴爾瑪的答案 - 也許有一種方法畢竟... –

回答

2

這是傳統的方式

$user_languages = array(); 
foreach($result as $row) { 
    $user_languages[$row['user']][] = $row['language']; 
} 
2

如果使用PDO,你可以使用它的FETCH_GROUP選項:

$stmt = $db->prepare("SELECT user, language FROM table"); 
$stmt->execute(); 
$results = $stmt->fetchAll(PDO::FETCH_COLUMN|PDO::FETCH_GROUP, 0); 

第三個參數是要用於分組零索引列數。見

http://www.php.net//manual/en/pdostatement.fetchall.php

的例子。

+0

好的解決方案。 +1。剛剛測試過 - 如果你刪除了'0'參數([Reference](http://www.php.net//manual/en/pdostatement.fetchall.php#example-999)),它可以很好地工作。結果:'[['John'] => ['english','french','spanish']]'。 –