Jump to content
Fórum Script Brasil
  • 0

Formatar saída de resultados, direto na query


vini_loock
 Share

Question

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', '[email protected]'),

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', '[email protected]'),

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', '[email protected]'),

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' => '[email protected]',

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

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

),

array(

'id' => '2',

'nome' => 'Etevaldo',

'email' => '[email protected]',

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

'endereco' => 'Marte',

),

array(

'id' => '3',

'nome' => 'Felisbina',

'email' => '[email protected]',

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

'endereco' => 'Blumenau',

),

)

Edited by vini_loock
Link to comment
Share on other sites

1 answer to this question

Recommended Posts

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share



  • Forum Statistics

    • Total Topics
      150.2k
    • Total Posts
      647.5k
×
×
  • Create New...