2009-08-18 16 views
1

讓我們假設我必須處理許多有很多貓的祖母。我有一個表granny_cat:直接從MySQL的列數據中獲取列表

granny_id | kitty_name 
-------------------- 
1   Kizzy 
1   Jimmy 
1   Katty 
2   Georges 
2   Albert 
3   Panther 

,我想找回的奶奶1貓的,即一個列表來獲得類似的信息(用PHP語法)

array("Kizzy","Jimmy","Katty") 

但是,查詢

SELECT kitty_name WHERE granny_id = 1 

回報像

array 
(
    array('kitty_name' => "Kizzy"), 
    array('kitty_name' => "Jimmy"), 
    array('kitty_name' => "Katty") 
) 

什麼是非常合乎邏輯的,因爲我可以用相似的查詢獲取兩個或更多字段。我可以很明顯地映射這個數組來得到我想要的,但是,我不知道是否有一種(簡單的)方式直接從mysql獲取它,或者不是。

謝謝。

回答

1
SELECT GROUP_CONCAT(kitty_name) 
FROM mytable 
WHERE granny_id = 1 

會給你逗號分隔的列表,它可以explode到一個數組。

MySQL不支持本機數組數據類型。在PostgreSQL你就可以做到以下幾點:

SELECT ARRAY 
     (
     SELECT kitty_name 
     FROM mytable 
     WHERE granny_id = 1 
     ) AS kitties 

,它會給你一個本地PHP陣列。

+0

謝謝,即使我不能使用PostgreSQL解決方案,我的好奇心也滿足了。然而,以逗號分隔的列表是危險的,如果某隻貓被命名爲「哦,你是一隻可愛的小貓!」 ? – user151229 2009-08-19 12:37:51

+0

@hlanak,很好的後續問題。您需要處理您自己的字段分隔符(您可以通過SEPARATOR在GROUP_CONCAT中指定)並轉義。例如,您可以在連接之前對HEX()進行編碼。 – pilcrow 2009-08-19 13:41:19

0

包裝庫通常會處理這個問題,例如, ADODbGetCol()方法:

$names=$db->GetCol('SELECT kitty_name WHERE granny_id = 1'); 
+0

嗯,是的,但我想知道如果我可以直接從MySQL獲取它。 – user151229 2009-08-19 12:31:23