• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

PHP

MySQL Get Array

7 mensagens neste tópico

Bem, é o seguinte: Tenho estado a tentar fazer com que uma query em MySQL me devolva o seguinte resultado:

$result = array(
abbreviation => language
abbreviation => language
abbreviation => language
abbreviation => language);

Em que a abbreviation é os dados de uma coluna chamada abbreviation e language é os dados de uma coluna chamada language.

O problema é que a minha pesquisa MySQL está a retornar o seguinte:

$result = array(
ID => X
Country => X
Language => X
Abbreviation => X);

E estes dados só são referentes ao primeiro registo da base de dados!  ;)

Uso o seguinte código:

$get_available_languages = 'SELECT * FROM countries_langs';
$get_available_languages = mysql_query($get_available_languages);
$get_available_languages = mysql_fetch_assoc($get_available_languages);

O que estou a fazer de mal?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tenta algo assim:

...
$sql = 'SELECT abbreviation FROM countries_lang';
$consulta = mysql_query($sql);
while ($linha = mysql_fetch_assoc($consulta))
{
$result[] = $linha;
}
...

Deve resolver, experimenta e diz qualquer coisa...

EDIT: typo

EDIT 2: Reparei que tava a perguntar "o que estou a fazer de mal?", convém explicar um bocado o código...ora então, a consulta (variável $sql) foi alterada para irmos apenas buscar o campo "abbreviation", uma vez que só esse é que no interessa. Depois temos um ciclo while(), que faz com que enquanto houver linhas de resultados, vamos atribuir ao array $result (com a notação $result[], que cria e preenche automaticamente o array) os resultados (através da função mysql_fetch_assoc();).

Portanto basicamente o teu código só ia buscar uma linha de resultados, e a consulta tava um bocadinho mal construída. Mas de resto tavas la quase!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

pk mysql_fetch_assoc e nao mysql_fetch_array?

São muito parecidog, o mysql_fetch_array(); devolve um array com chaves numericas e chaves com o nome do campo, tipo isto:

$result[0] = 'xpto1'

$result['campo1'] = 'xpto1'

$result[1] = 'xpto2'

$result['campo2'] = 'xpto2'

já o mysql_fetch_assoc(); devolve um array só com os nomes dos campos nas chaves. Basicamente, mysql_fetch_array() = mysql_fetch_assoc() + mysql_fetch_row().

Acaba por ser ligeiramente mais lento (diferença negligenciável), e ocupa mais memória (elementos duplicados). Portanto se não usamos as chaves numéricas, mais vale usar o mysql_fetch_assoc().

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

jreis: Obrigado pela explicação do código, embora eu tenha conseguido ler o código e percebê-lo antes de ter lido o resto do teu post xD.

psiico: Porque se fizeres mysql_fetch_array($result,MYSQL_ASSOC); vai te dar ao mesmo que o mysql_fetch_assoc. ;)

EDIT: jreis, apercebi-me agora de que tu fizeste o mesmo que eu tinha, simplesmente mostra todos os registos, em vez de só mostrar um...

$consulta = 'SELECT abbreviation, language FROM countries_langs';
$consulta = mysql_query($consulta);
while ($linha = mysql_fetch_assoc($consulta))
{
$get_available_languages[] = $linha;
}

Eu meti assim, porque eu preciso destas duas colunas, mas o que eu queria, parece que não me fiz entender bem, era que mostrasse os dados da primeira coluna como key e os dados da segunda como item. :S

Queria mesmo

$result = array(
abbreviation => language
abbreviation => language
abbreviation => language
abbreviation => language);

Não existe uma forma de conseguir isto?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
jreis: Obrigado pela explicação do código, embora eu tenha conseguido ler o código e percebê-lo antes de ter lido o resto do teu post xD.

No problem! ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

xD Enquanto tu respondias editei o meu post, podes-me ajudar?

EDIT: Esquece, consegui safar-me, usando a array que me deste. Obrigado!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora