Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Ronny Wdson

Gerar tabela com a quantidade de colunas dinâmicas

Recommended Posts

Olá galera

 

Estou desenvolvendo um sistema Web em PHP trabalhando em conjunto com algumas planilhas do excel.

A finalidade do sistema é controlar os orçamentos disponibilizados pela empresa para seus fornecedores. Por exemplo: eu preciso adquirir algumas peças e resolvo cotar com diversos fornecedores as mesmas peças. Toda informação que está no banco de dados Web é gerado pelo excel, que através de conexão ODBC envia todo o banco para a web, ficando assim disponível para que os fornecedores informem seus preços.

Bom... já desenvolvi a planilha do excel e também grande parte do sistema web. Só um detalhe falta para o término.

A estrutura da tabela no servidor web é a seguinte:

------------------------------------------------------------------

CREATE TABLE IF NOT EXISTS `cotacao` (

`id` int(11) unsigned NOT NULL auto_increment,

`descricao` varchar(100) default NULL,

`quantidade` double(10,2) default '0.00',

`empresa1` double(15,2) default '0.00',

`empresa2` double(15,2) default '0.00',

`empresa3` double(15,2) default '0.00',

`empresa4` double(15,2) default '0.00',

`empresa5` double(15,2) default '0.00',

`empresa6` double(15,2) default '0.00',

`empresa7` double(15,2) default '0.00',

`empresa8` double(15,2) default '0.00',

`empresa9` double(15,2) default '0.00',

`empresa10` double(15,2) default '0.00',

`empresa11` double(15,2) default '0.00',

`empresa12` double(15,2) default '0.00',

`empresa13` double(15,2) default '0.00',

`empresa14` double(15,2) default '0.00',

`empresa15` double(15,2) default '0.00',

`empresa16` double(15,2) default '0.00',

`empresa17` double(15,2) default '0.00',

`empresa18` double(15,2) default '0.00',

`empresa19` double(15,2) default '0.00',

`empresa20` double(15,2) default '0.00',

`empresa21` double(15,2) default '0.00',

`empresa22` double(15,2) default '0.00',

`empresa23` double(15,2) default '0.00',

`empresa24` double(15,2) default '0.00',

`empresa25` double(15,2) default '0.00',

`empresa26` double(15,2) default '0.00',

`empresa27` double(15,2) default '0.00',

`empresa28` double(15,2) default '0.00',

`empresa29` double(15,2) default '0.00',

`empresa30` double(15,2) default '0.00',

PRIMARY KEY (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=31 ;

------------------------------------------------------------------

Deixei o limite para 30 empresas participantes das cotações.

Minha planilha excel manda para a web todos os produtos que precisam ser cotados e um email para cada empresa que o usuário selecionar para participar.

Digamos que o usuário selecionou a empresa 1 e a empresa 10 para participar de uma cotação, vou precisar gerar uma tabela HTML com os dados somente das colunas que soma for maior que 0 (zero) e gerar uma tabela contendo:

ID DESCRIÇÃO QUANTIDADE EMPRESA??? EMPRESA??? (...demais empresas...)

 

Fiz uma macro excel que acessará o endereço e importará essa planilha gerada na web.

Consegui fazer em php um script que apresente a quantidade de empresas que estão e que não estão participando dessa cotação. O script é o apresentado abaixo

---------------------------------------------------------------

$comvalor = 0;

$semvalor = 0;

 

for ($i = 1; $i <= 30; $i++) {

$totempresa[$i] = mysql_query("SELECT SUM(empresa".$i.") as soma FROM cotacao");

$row = mysql_fetch_array($totempresa[$i]);

echo "Empresa".$i.": ".number_format($row[soma], 2, ',','.')."</br>";

if($row[soma]>0)

$comvalor ++ ;

else

$semvalor ++ ;

}

echo "</br>";

echo "Total de empresas que participaram....: ".$comvalor."</br>";

echo "Total de empresas que não participaram: ".$semvalor."</br>";

---------------------------------------------------------------

 

Se alguém puder me ajudar, ficaria muito agradecido.

Obrigado pela atenção!

 

Pessoal

 

Caso alguém queira fazer uns testes, segue abaixo uns inserts para ter dados para testes

 

-----------------------------------------------------------------------------------------

INSERT INTO `cotacao` (`id`, `descricao`, `quantidade`, `empresa1`, `empresa2`, `empresa3`, `empresa4`, `empresa5`, `empresa6`, `empresa7`, `empresa8`, `empresa9`, `empresa10`, `empresa11`, `empresa12`, `empresa13`, `empresa14`, `empresa15`, `empresa16`, `empresa17`, `empresa18`, `empresa19`, `empresa20`, `empresa21`, `empresa22`, `empresa23`, `empresa24`, `empresa25`, `empresa26`, `empresa27`, `empresa28`, `empresa29`, `empresa30`) VALUES

(1, 'Produto1', 10.00, 999.88, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 222.22, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00),

(2, 'Produto2', 11.00, 522.68, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 580.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00),

(3, 'Produto3', 12.00, 333.33, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 660.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00),

(4, 'Produto4', 13.00, 455.62, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 740.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00),

(5, 'Produto5', 14.00, 78.95, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 820.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00),

(6, 'Produto6', 15.00, 2215.63, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 900.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00),

(7, 'Produto7', 16.00, 215.65, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 980.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00),

(8, 'Produto8', 17.00, 221.53, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5888.55, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00),

(9, 'Produto9', 18.00, 221.55, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1140.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00),

(10, 'Produto10', 19.00, 212.55, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1220.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00),

 

Att

Ronny Wdson

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha Ronny, eu acredito ter entendido errado, mas para gerar uma tabela em html de forma simples, é simples.

O que tu disse que precisa: Gerar uma tabela com os dados: ID DESCRIÇÃO QUANTIDADE EMPRESA??? EMPRESA???

 

O teu código já está fazendo isso, no momento de verificar se ele é maior que zero nas variaveis $comvalor e $semvalor coloca um echo.

 

<table width="200" border="1">
 <tr>
   <td>ID    </td>
   <td>DESCRIÇÃO </td>
   <td>QUANTIDADE</td>
   <?php
     if($row[soma]>0){
      echo "<td>EMPRESA". $i."</td>"

   }
?>
 </tr>
</table>

 

Claro, este é só um exemplo, mas pelo que li acredito ser isso que procura.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Título do tópico editado.

PROBLEMÃO :seta: Gerar tabela com a quantidade de colunas dinâmicas

Compartilhar este post


Link para o post
Compartilhar em outros sites

se é em banco que quer salvar o melhor modelo não é este mas sim criar uma segunda tabela só para empresas

 

você pode usar 1:n ou n:m

 

1:n

cada cotação vai ter várias empresas e estas empresas terão a fk da cotação

 

n:m

as empresas já estarão cadastradas e ao cadastrar a cotação você vai vinculá-la às empresas através da tabela de relacionamento que receberá as fks das duas tabelas

 

nota: se preferir continuar com seu modelo atual não será uma boa prática, mas você pode ir concatenando a string da query enquanto tiver novas colunas

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara eu não entendi bem sua tabela..

 

vejamos você cria diversos campos empresa1 empresa2 empresa3 pelo que eu li, pela sua proposta não é necessário 1 campo chamado empresa esta ótimo, então você cadastra x empresas.

o que vai diferir uma empresa de outra é o ID

 

feito isso creio que terá que criar uma função para fazer a consulta dinamica, vou tentar dar um exemplo:

 

HTML

<form action="relatorio.php" method="post">
<label>
   <input type="checkbox" name="empresas[]" value="idEmpresa1">
   <span>Empresa1</span>
</label>
<label>
   <input type="checkbox" name="empresas[]" value="idEmpresa2">
   <span>Empresa2</span>
</label>
<label>
   <input type="checkbox" name="empresas[]" value="idEmpresa3">
   <span>Empresa3</span>
</label>
<label>
   <input type="checkbox" name="empresas[]" value="idEmpresa4">
   <span>Empresa4</span>
</label>
<label>
   <input type="checkbox" name="empresas[]" value="idEmpresa5">
   <span>Empresa5</span>
</label>
<label>
   <input type="checkbox" name="empresas[]" value="idEmpresa6">
   <span>Empresa 6</span>
</label>
</form>

 

relatorio.php

extract($_POST);
$sql = 'SELECT * FROM cotacao WHERE';
foreach($empresas as $empresa){
   $sql .= "id = '$empresa' OR ";
}
$consulta = substr($sql, 0, -3);

ai agora independente do número de empresas que ele escolher você vai retornar todos os dados da COTACAO.

é só executar agora a $consulta

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hmmm... pesquise um pouco sobre normalização de dados e você vai ver porque é ruim fazer dessa forma...

 

 

Isso é a mais pura verdade meu amigo... sei que essa tabela não foi montade de forma ideal, mas o problema é que o próprio excel que a gera baseado na tabela que o usuário trabalha... e isso de forma dinamica.

Muito obrigado pela atenção!

 

Olha Ronny, eu acredito ter entendido errado, mas para gerar uma tabela em html de forma simples, é simples.

O que tu disse que precisa: Gerar uma tabela com os dados: ID DESCRIÇÃO QUANTIDADE EMPRESA??? EMPRESA???

 

O teu código já está fazendo isso, no momento de verificar se ele é maior que zero nas variaveis $comvalor e $semvalor coloca um echo.

 

<table width="200" border="1">
 <tr>
   <td>ID    </td>
   <td>DESCRIÇÃO </td>
   <td>QUANTIDADE</td>
   <?php
     if($row[soma]>0){
      echo "<td>EMPRESA". $i."</td>"

   }
?>
 </tr>
</table>

 

Claro, este é só um exemplo, mas pelo que li acredito ser isso que procura.

 

 

Verdade... vou aproveitar tudo que fiz e acrescentar umas instruções para ele gerar um código sql para criar uma tabela temporária e inserir esses dados nela... acho que vai funcionar

 

se é em banco que quer salvar o melhor modelo não é este mas sim criar uma segunda tabela só para empresas

 

você pode usar 1:n ou n:m

 

1:n

cada cotação vai ter várias empresas e estas empresas terão a fk da cotação

 

n:m

as empresas já estarão cadastradas e ao cadastrar a cotação você vai vinculá-la às empresas através da tabela de relacionamento que receberá as fks das duas tabelas

 

nota: se preferir continuar com seu modelo atual não será uma boa prática, mas você pode ir concatenando a string da query enquanto tiver novas colunas

 

O grande problema é que é o proprio excel que gera essa tabela quando o usuário executa uma macro específica.

Sei também que não estou usando um modelo de dados correto... tudo está parecendo meio gambiarra... mas obrigado pela atenção meu amigo

 

Pessoal

 

Consegui resolver meu problema da seguinte forma:

Aproveitando o código que eu escrevi, criei uma SQL para criar uma tabela TEMPORÁRIA com base nas colunas que eu queria e outra SQL para inserir os dados que eu queria.

Assim consegui gerar uma tabela HTML (no formado para importação para o excel) somente com as informações que eu queria... o código ficou assim:

--------------------------------------------------------------------

$qry="SELECT * FROM cotacao";

$result=mysql_query($qry);

$total = 0 ;

if($result) {

if(mysql_num_rows($result) >= 1) {

$comvalor = 0;

$nomecomvalor = "";

$semvalor = 0;

$nomesemvalor = "";

$sql_cria = "CREATE TABLE IF NOT EXISTS `temp` (`id` int(11) unsigned NOT NULL auto_increment, `descricao` varchar(100) default NULL, `quantidade` double(10,2) default '0.00',";

$sql_copiaini = "INSERT INTO temp (id, descricao, quantidade ";

$sql_copiafim = ") SELECT id, descricao, quantidade";

$sql_copia="";

 

for ($i = 1; $i <= 30; $i++) {

$totempresa[$i] = mysql_query("SELECT SUM(empresa".$i.") as soma FROM cotacao");

$row = mysql_fetch_array($totempresa[$i]);

if($row[soma]>0){

$comvalor ++ ;

$nomecomvalor .= " Empresa".$i.", ";

$sql_cria .= " `empresa".$i."` double(15,2) default '0.00',";

$sql_copiaini .= ", empresa".$i;

$sql_copiafim .= ", empresa".$i;

}else{

$semvalor ++ ;

$nomesemvalor .= " Empresa".$i.", ";

}

}

$sql_cria .= " PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1";

$sql_copia = $sql_copiaini.$sql_copiafim." FROM cotacao";;

mysql_query($sql_cria);

mysql_query($sql_copia);

}else {

echo "Não existe peças a serem orçadas por essa empresa!!";

}

}else {

die("Falha na consulta");

}

------------------------------------------------------------------------------------

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.