Ir para conteúdo
Fórum Script Brasil
  • 0

Formatar saída de resultados, direto na query


vini_loock

Pergunta

Tenho um banco de dados com 3 tabelas, nessa estrutura:

emissoras{

id (int)

}

fields{

id (int)

required (int)

published (int)

type (varchar)

name (varchar)

value (text)

label (text)

}

values{

id (int)

emissora_id (int)

field_id (int)

value (text)

}

A tabela emissoras vai guardar apenas um id para servir de base na hora de resgatar um registro.

Esse registro será feito a partir de um formulário, que é gerado conforme os registros na tabela fields. O id é salvo na tabela emissoras e os dados na tabela values, relacionando o valor do campo(field_id) com a emissora(emissora_id)

Agora é que vem a parte complicada. Preciso formatar a forma que o resultado virá.

Preciso pega, em uma única query, um array com este formato:

$items = array(

array(

'fields.name' => 'values.value',

),

array(

'fields.name' => 'values.value',

)

)

Onde o array $item, seria todos os resultados da query e cada um dos arrays dentro dele seriam os registros em sí.

'fields.name' => 'values.value', representa uma lista onde poderiam ter mais de um indice, mas sempre seguindo o mesmo padrão.

Resumindo, o que eu preciso é que minha query retorne uma lista agrupando os valores em 'values' de acordo com os id's em 'emissoras' e que o grupo de valores desta lista, seja, na verdade, outra lista onde a key seria o campo name da tabela fields(fields.name) e o valor, o campo value da tabela values(values.value).

Exemplificando:

Considere as tabelas com os seguintes dados:

// Insere dados na tabela fields

INSERT INTO `fields` (id, name)

VALUES('1', 'nome'),

VALUES('2', 'email'),

VALUES('3', 'telefone'),

VALUES('4', 'endereco')

// Insere dados na tabela emissoras

INSERT INTO `emissoras` (id)

VALUES(1),

VALUES(2),

VALUES(3),

// Insere dados na tabela values

INSERT INTO `values` (id, emissora_id, field_id, value)

// Dados correspondentes à emissora #1

VALUES('1', '1', '1', 'Joaquim'),

VALUES('1', '1', '2', 'Joaquim@oSite.com'),

VALUES('1', '1', '3', '(66) 6666-6666'),

VALUES('1', '1', '5', 'Rua dos bobos, 0'),

// Dados correspondentes à emissora #2

VALUES('1', '1', '1', 'Etevaldo'),

VALUES('1', '1', '2', 'Etevaldo@marte.com'),

VALUES('1', '1', '3', '(55) 5555-5555'),

VALUES('1', '1', '5', 'Marte'),

// Dados correspondentes à emissora #3

VALUES('1', '1', '1', 'Felisbina'),

VALUES('1', '1', '2', 'Felisbina@gugu.com'),

VALUES('1', '1', '3', '(33) 3333-3333'),

VALUES('1', '1', '5', 'Blumenau'),

Quero um resultado assim:
array(

array(

'id' => '1', // id da emissora

'nome' => 'Joaquim',

'email' => 'Joaquim@oSite.com',

'telefone' => '(66) 6666-6666',

'endereco' => 'Rua dos bobos, 0',

),

array(

'id' => '2',

'nome' => 'Etevaldo',

'email' => 'Etevaldo@marte.com',

'telefone' => '(55) 5555-5555',

'endereco' => 'Marte',

),

array(

'id' => '3',

'nome' => 'Felisbina',

'email' => 'Felisbina@gugu.com',

'telefone' => '(33) 3333-3333',

'endereco' => 'Blumenau',

),

)

Editado por vini_loock
Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...