使用MySQL直接从列数据中获取列表

时间:2009-08-18 17:51:33

标签: php sql mysql list transpose

让我们假设我必须与很多有很多猫的祖母打交道。我有一张表granny_cat:

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获取它。或者不是。

感谢。

2 个答案:

答案 0 :(得分: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数组。

答案 1 :(得分:0)

包装器库通常会处理此问题,例如: ADODb使用GetCol()方法:

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