Fóruns sobre PHP, JavaScript, HTML, MySQLi, jQuery, Banco de Dados, CSS


Moderador: web

 
Primeiras postagens
Primeiras postagens
Tópico Autor
Mensagens: 8
Sexo: Masculino

Campos multivalorados - Exibição

03-06-2013 17:53

Estou fazendo um script e me deparei com uma dúvida que me parece simples, mas não consigo resolver, é o seguinte:

Estou fazendo um SELECT com INNER JOIN para pegar os dados de 2 tabelas, em uma tem "Tamanho" e na outra os valores "P, M, G"

Hoje quando eu faço o FOREACH ele mostra os dados da seguinte maneira:
Tamanho | P
Tamanho | M
Tamanho | G

O que preciso fazer é na minha exibição mostrar os dados da seguinte forma, agrupando os dados da minha segunda tabela na base em apenas uma <tr>:
Tamanho | P,M,G

Alguém sabe como posso fazer isso?
Obrigado!
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17583
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Campos multivalorados - Exibição

03-06-2013 18:41

Você pode na consulta, armazenar os valores em um array

antes da consulta

$valores = Array(); 

dentro da consulta

$valores[] = $valor; 

Fora da consulta

echo implode($valores, ","); 

Mais ou menos assim

<?php $tamanho = "Tamanho"; $valores = Array("P", "M", "G"); echo "$tamanho "; echo implode($valores, ","); ?>

0
A melhor hospedagem para o seu site HostGator!
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17583
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Campos multivalorados - Exibição

03-06-2013 19:01

Você também pode fazer de uma forma direta, na query

SELECT CONCAT(coluna1, ',', coluna2) AS juntos FROM tabela

Como mostrado, você está juntando os valores da coluna1 e coluna2, separando os 2 valores pela vírgula, e armazenando em $juntos.

$juntos vai exibir os valores concatenados no while.
0
A melhor hospedagem para o seu site HostGator!
 
Primeiras postagens
Primeiras postagens
Tópico Autor
Mensagens: 8
Sexo: Masculino

Campos multivalorados - Exibição

03-06-2013 19:01

Obrigado pela resposta WEB, não consegui ainda visualizar como eu posso fazer isso com meu código, segue para analisar:

Faço um SELECT INNER JOIN e pego o resultado:

                            foreach($variables as $variable)                             {                                 echo '                                     <tr>                                         <td>'. $variable->id .'</td>                                         <td>'. $variable->name .'</td>                                         <td>'. $variable->values .'</td>                                      </tr>                                 ';                             }

Isso me gera

<tr> <td>Tamanho</td> <td>P</td> </tr> <tr> <td>Tamanho</td> <td>M</td> </tr> <tr> <td>Tamanho</td> <td>G</td> </tr>

 Mas preciso:
 
<tr> <td>Tamanho</td> <td>P,M,G</td> </tr>

Podes me dar um ideia mais aproximada? Obrigado!
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17583
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Campos multivalorados - Exibição

03-06-2013 19:13

Vai ficar assim

// CRIANDO OS ARRAYS $tamanho = Array(); $nomes = Array(); // SEU FOREACH ARMAZENANDO OS VALORES foreach($variables as $variable) { $tamanho[] = $variable->id; $nomes[] = $variable->name; } // FORA DO FOREACH $imp = implode($nomes, ","); // EXIBINDO A LINHA echo "<tr> <td>{$tamanho[0]}</td> <td>{$imp}</td> </tr>";

0
A melhor hospedagem para o seu site HostGator!
 
Primeiras postagens
Primeiras postagens
Tópico Autor
Mensagens: 8
Sexo: Masculino

Campos multivalorados - Exibição

04-06-2013 09:32

Boa!
Consegui agrupar os dados, mas como é um campo dinâmico não posso agrupar todos e sim aqueles que pertencem ao array.

EX.: Tamanho -> P,M,G
Cor -> Azul, Amarelo, Vermelho
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17583
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Campos multivalorados - Exibição

04-06-2013 09:36

Ai no caso você vai precisar relacionar sempre o array $tamanho ao $nomes?
0
A melhor hospedagem para o seu site HostGator!
 
Primeiras postagens
Primeiras postagens
Tópico Autor
Mensagens: 8
Sexo: Masculino

Campos multivalorados - Exibição

04-06-2013 09:39

Exatamente, preciso relacionar um ao outro, no caso tenho 2 tabelas no mysql que junto no SELECT INNER JOIN.

Podes me ajudar?
0
 
Primeiras postagens
Primeiras postagens
Tópico Autor
Mensagens: 8
Sexo: Masculino

Campos multivalorados - Exibição

04-06-2013 11:52

Tentei fazer um GROUP no SELECT mas não deu certo. Tem como fazer esse agrupamento na mão sem fazer outro SELECT?
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17583
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Campos multivalorados - Exibição

04-06-2013 11:54

Quer dizer que $variable->id pode ter o valor: Tamanho ou Cor?

Teria que fazer um array para cada grupo

Antes do foreach
$tamanho = Array(); $valor_tamanho = Array(); 

Dentro do foreach

if($variable->id=="Tamanho") { $tamanho[] = $variable->id; $valor_tamanho[] = $variable->name; } 

Para pegar esse bloco fora do foreach

$imp1 = implode($valor_tamanho, ","); echo "<tr> <td>{$tamanho[0]}</td> <td>{$imp1}</td> </tr>"; 

Para a parte da cor, vai ser parecido

Antes do foreach
$cor = Array(); $valor_cor = Array(); 

Dentro do foreach

if($variable->id=="Cor") { $cor[] = $variable->id; $valor_cor[] = $variable->name; } 

Para pegar esse bloco fora do foreach

$imp2 = implode($valor_cor, ","); echo "<tr> <td>{$cor[0]}</td> <td>{$imp2}</td> </tr>"; 

0
A melhor hospedagem para o seu site HostGator!
 
Primeiras postagens
Primeiras postagens
Tópico Autor
Mensagens: 8
Sexo: Masculino

Campos multivalorados - Exibição

04-06-2013 12:41

$variable->id pode ser N pois é um campo dinâmico. Tentei fazer o seguinte:

 foreach($variables as $variable)                             {                                 $values[] = $variable->values;                                 $imp = implode($values, ",");                                                                  echo '                                     <tr>                                         <td>'. $variable->name .'</td>                                         <td>'. $imp .'</td>                                      </tr>                                 ';                             }  

 
Mas ele mistura todas os results :/
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17583
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Campos multivalorados - Exibição

04-06-2013 12:52

Você falou que seria tamanho ou cor. Com valores dinâmicos, talvez fosse melhor fazer uma consulta só para pegar os grupos, tamanho, cor, etc.... e um sub-consulta dentro da primeira para pegar os itens do id principal.
0
A melhor hospedagem para o seu site HostGator!
 
Primeiras postagens
Primeiras postagens
Tópico Autor
Mensagens: 8
Sexo: Masculino

Campos multivalorados - Exibição

04-06-2013 12:55

Eu não gostaria de fazer duas consultas pra poder ganhar em performance, mas ai que to me batendo pra agrupar corretamente esse array :/

Será que tem como ou é perca de tempo?
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17583
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Campos multivalorados - Exibição

04-06-2013 13:00

Eu acho que é possível, mas tem que sentar e pensar. Porque sendo dinâmico, tem que agrupar primeiro os ids no array, e retirar os repetidos, depois gerar grupos interno para aquele array.

Se desejar, deixa um sql com o INSERT e alguns valores cadastrados para o bd. Quando puder dou uma olhada.
0
A melhor hospedagem para o seu site HostGator!
 
Primeiras postagens
Primeiras postagens
Tópico Autor
Mensagens: 8
Sexo: Masculino

Campos multivalorados - Exibição

04-06-2013 17:16

Opa, parece algo simples mas é bem complicadinho... Obrigado pela ajuda! Abaixo o que pensei de estrutura SQL:

Tabela/Dados:

//cria 2 tabelas, uma para dados e outra para valores CREATE TABLE variables (id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(id), name VARCHAR(45)) CREATE TABLE variables_values (idVariable INT, value VARCHAR(45)) //insere dados nas duas tabelas INSERT INTO variables (name) VALUES ('$nome') //recuperar ultimo id inserido na tabela VARIABLES INSERT INTO variables_values (idVariables, value) VALUES (LAST_INSERT_ID(), '$value') 

Exibição dos dados:

A exibição dos dados hoje acontece da seguinte forma:

//seleciona dados das 2 tabelas SELECT * FROM variables INNER JOIN variables_values ON variables.id=variables_values.idVariables; 

A intenção é que a exibição seja em tabela, agrupando os arrays similares de dados e valores, da seguinte forma:

<tr>    <td>Dado</td>    <td>Valor 1, Valor 2, Valor 3</td> </tr> 

0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17583
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Campos multivalorados - Exibição

04-06-2013 17:20

Lá no phpmyadmin tem uma coluna chamada exportar. Ao clicar nela, vai carregar uma área para você selecionar as tabelas a serem exportadas, com algumas ou todas as linhas cadastradas.
0
A melhor hospedagem para o seu site HostGator!

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado