Pergunta

Suponhamos que eu tenha que lidar com muitas avós que têm muitos gatos. Eu tenho uma mesa Granny_cat:

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

E eu quero recuperar uma lista de gatos da vovó 1, ou seja, para obter algo como (com a sintaxe do PHP)

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

No entanto, a consulta

SELECT kitty_name WHERE granny_id = 1

retorna algo como

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

O que é bastante lógico, pois posso buscar dois ou mais campos com uma consulta semelhante. Obviamente, posso mapear essa matriz para obter o que quero, no entanto, me pergunto se existe uma maneira (simples) de obtê -la diretamente do MySQL, ou não.

Obrigado.

Foi útil?

Solução

SELECT  GROUP_CONCAT(kitty_name) 
FROM    mytable
WHERE   granny_id = 1

darei a você a lista delimitada por vírgula que você pode explode em uma matriz.

MySQL não suporta dados de dados de matriz nativa. Dentro PostgreSQL Você seria capaz de fazer o seguinte:

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

, o que te daria um nativo PHP variedade.

Outras dicas

Uma biblioteca de wrapper normalmente lida com isso, por exemplo Adodb tem o GetCol () método:

$names=$db->GetCol('SELECT kitty_name WHERE granny_id = 1');
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top