Ir para conteúdo

POWERED BY:

Arquivado

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

patriclrv07

Array em coluna

Recommended Posts

Pessoal,

 

Tenho 2 tabelas sql server, sendo a primeira assim

 

Codigo | Data | etc |etc | etc|

A00001 | 20120101 | x |x |x |

A00002 | 20120102 | x |x |x |

A00003 | 20120103 | x |x |x |

 

 

A 2 tabela ta assim

 

Codigo | Cod Descricao | Desc Descricao | Peso

A00001 | 000001 | Umidade | 5000

A00001 | 000002 | Impureza | 20

A00001 | 000003 | Avariados | 500

A00001 | 000004 | Outros | 10000

A00002 | 000001 | Umidade | 5000

A00002 | 000002 | Impureza | 20

A00002 | 000003 | Avariados | 500

A00002 | 000004 | Outros | 10000

A00003 | 000001 | Umidade | 5000

A00003 | 000002 | Impureza | 20

A00003 | 000003 | Avariados | 500

A00003 | 000004 | Outros | 10000

 

 

Entao fiz um array mas nao consigo juntar os dados em colunas.. preciso assim

 

Codigo | Data | (000001)Umidade | (000002)Impureza | (000003)Avariados | (000004)Outros

A00001 | 20120101 | 5000 | 20 | 500 | 10000

A00002 | 20120102 | 5000 | 20 | 500 | 10000

A00003 | 20120103 | 5000 | 20 | 500 | 10000

 

Entao.. 2 tabela e relacionas pelo codigo entre ambas, so que na segunda tabela tem varios registros do mesmo codigo. exemplo acima.. preciso q fique as colunas oque acontece no meu array e que os dados ficam 3 linhas uma abaixo da outra com o mesmo codigo.

 

Se alguem poder me ajudar, agradeco.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, provavelmente deve ter uma outra forma de fazer, mas foi a que me veio na cabeça agora e atende sua necessidade:

 

$cn = mysql_connect('127.0.0.1','root','',true);
mysql_select_db('enquete',$cn);

$rs1 = mysql_query('SELECT DISTINCT coddescricao,descricao FROM tb2 ORDER BY descricao ASC');

$fields = array();
while($row = mysql_fetch_assoc($rs1)){
$fields[] = '(SELECT SUM(peso) FROM tb2 WHERE tb2.codigo = tb1.codigo AND tb2.coddescricao = '.$row['coddescricao'].') as "'.$row['descricao'].'"';
}

mysql_free_result($rs1);

if(!empty($fields)){
$sql = 'SELECT codigo,data,' . implode(', ', $fields).' FROM tb1';
$rs = mysql_query($sql);

while($row = mysql_fetch_assoc($rs)){
	print_r($row);
}

mysql_free_result($rs);

}

mysql_close($cn);

 

@braços e fique com Deus!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola hufersil,

 

Vou analisar seu codigo e tentar colocar ele para funcionar.

 

Esqueci de colocar as 2 query que tenho. elas sao SQL Server, mas roda do mesmo jeito, da uma olha se tua logica e a mesma com as Querys reais.

 

SELECT NPO_CODIGO, NPO_DATA
FROM NPO010 NPO (NOLOCK)
WHERE NPO_SAFRA = '201201' 
AND NPO_FAZ  = '05' 
AND NPO_TALHAO = '55'
AND NPO_TIPO  = 'P' 
AND D_E_L_E_T_ = ' ' 
ORDER BY NPO_CODIGO, NPO_DATA

 

 

SELECT NPO_CODIGO, NPP_CODDES, NPP_DESDES, SUM(NPP_PERDES) NPP_PERDES, SUM(NPP_PESDES) NPP_PESDES 
FROM NPO010 NPO (NOLOCK), NPP010 NPP (NOLOCK) 
WHERE NPP_FILIAL = NPO_FILIAL 
AND NPP_CODIGO 	= NPO_CODIGO 
AND NPO_SAFRA 	= '201201'
AND NPO_FAZ 	= '05' 
AND NPO_TALHAO 	= '55'
AND NPO_CODIGO = 'Pega o codigo da query de cima'
AND NPO_TIPO 	= 'P' 
AND NPO.D_E_L_E_T_ = ' ' 
AND NPP.D_E_L_E_T_ = ' ' 
GROUP BY NPO_CODIGO, NPP_CODDES, NPP_DESDES
ORDER BY NPO_CODIGO, NPP_CODDES

 

 

Valeu por enquanto!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, com as tuas queries dá pra montar sim.

 

@braços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Assim, sem ter os dados para testar, fica complicado.

Fiz um exemplo que acredito que vá funcionar.

 

$rs1 = mysql_query('SELECT DISTINCT NPP_CODES, NPP_DESDES FROM NPP010 ORDER BY NPP_DESDES ASC');

$fields = array();
while($row = mysql_fetch_assoc($rs1)){
       $fields[] = sprintf("(SELECT SUM(NPP_PESDES)
					FROM NPO010 NPO (NOLOCK), NPP010 NPP (NOLOCK) 
					WHERE NPP_FILIAL = NPO1.NPO_FILIAL 
					AND NPP_CODIGO  = NPO1.NPO_CODIGO
					AND NPO_SAFRA   = NPO1.NPO_SAFRA
					AND NPO_FAZ     = NPO1.NPO_FAZ
					AND NPO_TALHAO  = NPO1.NPO_TALHAO
					AND NPO_CODIGO = NPO1.NPO_CODIGO
					AND NPO_TIPO    = NPO1.NPO_TIPO
					AND NPO.D_E_L_E_T_ = NPO1.D_E_L_E_T_
					AND NPP.D_E_L_E_T_ = NPO1.D_E_L_E_T_
					AND NPP.NPP_CODDES = '%s'
					GROUP BY NPO.NPO_CODIGO, NPP_CODDES, NPP_DESDES) as \"%s\"",
					$row['NPP_CODES'], $row['NPP_DESDES']);
}

mysql_free_result($rs1);

if(!empty($fields)){
       $sql = "SELECT NPO_CODIGO, NPO_DATA, " . implode(', ', $fields) . "
			FROM NPO010 NPO1 (NOLOCK)
			WHERE NPO_SAFRA = '201201' 
			AND NPO_FAZ  = '05' 
			AND NPO_TALHAO = '55'
			AND NPO_TIPO  = 'P' 
			AND D_E_L_E_T_ = ' ' 
			ORDER BY NPO_CODIGO, NPO_DATA";

       $rs = mysql_query($sql);

       while($row = mysql_fetch_assoc($rs)){
               print_r($row);
       }

       mysql_free_result($rs);

}

 

@braços

Compartilhar este post


Link para o post
Compartilhar em outros sites

hufersil,

 

Olha um pedaco do resultado.. acho q deu certo. agora vou colocar nas tabelas..

 

Array ( [NPO_CODIGO] => 010811 [NPO_DATA] => 20120128 [ARDIDOS ] => [AVARIADOS ] => [ESVERDEADO ] => [iMPUREZA ] => [QUEBRADOS ] => [TAXA RECEPCAO OPERAC] => [TRANSGENICO ] => [uMIDADE ] => ) Array ( [NPO_CODIGO] => 010814 [NPO_DATA] => 20120128 [ARDIDOS ] => [AVARIADOS ] => [ESVERDEADO ] => [iMPUREZA ] => [QUEBRADOS ] => [TAXA RECEPCAO OPERAC] => [TRANSGENICO ] => [uMIDADE ] => ) Array ( [NPO_CODIGO] => 010817 [NPO_DATA] => 20120128 [ARDIDOS ] => [AVARIADOS ] => [ESVERDEADO ] => [iMPUREZA ] => [QUEBRADOS ] => [TAXA RECEPCAO OPERAC] => [TRANSGENICO ] => [uMIDADE ] => ) Array ( [NPO_CODIGO] => 010828 [NPO_DATA] => 20120129 [ARDIDOS ] => [AVARIADOS ] => [ESVERDEADO ] => [iMPUREZA ] => [QUEBRADOS ] => [TAXA RECEPCAO OPERAC] => [TRANSGENICO ] => [uMIDADE ] => ) Array ( [NPO_CODIGO] => 010836 [NPO_DATA] => 20120129 [ARDIDOS ] => [AVARIADOS ] => [ESVERDEADO ] => [iMPUREZA ] => [QUEBRADOS ] => [TAXA RECEPCAO OPERAC] => [TRANSGENICO ] => [uMIDADE ] => )

 

 

 

Aonde mostra Ardidos | Avariados | impureza | ele ta mostrando os dados em branco. mas na tabela tem os dados.. sera pq?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pegue a consulta final gerada e execute no terminal/interface para que você possa depurar melhor e tentar achar o problema.

 

@braços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hugo, me da uma informação,

 

Array ( [NPO_CODIGO] => 010811 [NPO_DATA] => 20120128 [ARDIDOS ] => [AVARIADOS ] => [ESVERDEADO ] => [iMPUREZA ] => [QUEBRADOS ] => [TAXA RECEPCAO OPERAC] => [TRANSGENICO ] => [uMIDADE ] => )

 

 

Como faco para pegar a variavel ARDIDOS, AVARIADOS, ETC??

 

 

 

Valew e Obrigado por enquanto!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Antes de querer pegar estes dados no PHP, teste sua consulta no terminal do SQL Server.

Para saber qual consulta está sendo feita, coloque um "echo" depois deste código:

 

$sql = "SELECT NPO_CODIGO, NPO_DATA, " . implode(', ', $fields) . "
                               FROM NPO010 NPO1 (NOLOCK)
                               WHERE NPO_SAFRA = '201201' 
                               AND NPO_FAZ  = '05' 
                               AND NPO_TALHAO = '55'
                               AND NPO_TIPO  = 'P' 
                               AND D_E_L_E_T_ = ' ' 
                               ORDER BY NPO_CODIGO, NPO_DATA";

echo $sql; // <----------- ADICIONE ESTA LINHA

 

Veja se a consulta está certa. Se não estiver, tente ajusta-la para trazer os valores corretos primeiro na consulta. Quando estiver trazendo os valores certinho, você já saberá o que alterar no php :thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa Hugo,

 

ja modifiquei varias coisas, ta quase perfeito.. sobre a questao dos valores coloquei array no

 

While($row = mssql_fetch_array($rs)){ 
               //print_r($row);

 

 

Daqui a pouco coloco o codigo pronto, para tu ver.

 

Valew por enquanto!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você quer fazer o que com os valores?

Montar uma tabela?

 

Se sim, segue um exemplo de como montar ela totalmente dinamica, inclusive os headers:

 

	$resultset = array();
	$headers   = array();
       while($row = mysql_fetch_assoc($rs)){
           // print_r($row);
		if(empty($headers)){
			$headers = array_keys($row);
		}
		$resultset[] = $row;
       }

	// montando a tabela
	echo '<table width="100%">';
	echo '<tr>';
	foreach($headers as $header){
		echo '<th>', $header, '</th>';
	}
	echo '</tr>';

	// exibindo os resultados
	foreach($resultset as $row){
		echo '<tr>';
		foreach($headers as $col){
			echo '<td>', $row[$col],'</td>',PHP_EOL;
		}
		echo '</tr>';
	}

	echo '</table>';

 

@braços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hugo,

 

 

tem este pedaco aqui,

 

$fields = array(); 
while($row = mysql_fetch_assoc($rs1)){ 
       $fields[] = sprintf("(SELECT SUM(NPP_PESDES) 
                                               FROM NPO010 NPO (NOLOCK), NPP010 NPP (NOLOCK)  

 

 

estou querendo colocar depois do SUM(NPP_PESDES) isso

 

SELECT SUM(NPP_PESDES) NPP_PESDES, SUM(NPP_PERDES) NPP_PERDES

 

 

ele da erro, mas nao ta faltando nada, sabe algo?

 

 

Valew!

Compartilhar este post


Link para o post
Compartilhar em outros sites

sub-consulta para retornar como data-select deve retornar apenas uma coluna.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bah!

 

Agora sim.. é possivel de algum jeito colocar mais uma?

 

 

 

++++++++++

 

 

 

Hugo, tem como me dar um explicacao mostrando como exemplo o codigo meu?

 

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente concatenar as duas colunas

 

SELECT SUM(NPP_PESDES) + ' / ' + SUM(NPP_PERDES)  ...

 

@braços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hugo, fiz assim

 

SELECT (CAST(NPP_PERDES AS VARCHAR)+' - '+CAST(NPP_PESDES AS VARCHAR)) AS TESTE
                            FROM NPO010 NPO (NOLOCK), NPP010 NPP (NOLOCK)  
                            WHERE NPP_FILIAL = NPO1.NPO_FILIAL  
                            AND NPP_CODIGO  = NPO1.NPO_CODIGO
                            AND NPO_SAFRA   = NPO1.NPO_SAFRA 
                            AND NPO_FAZ     = NPO1.NPO_FAZ 
                            AND NPO_TALHAO  = NPO1.NPO_TALHAO 
                            AND NPO_CODIGO = NPO1.NPO_CODIGO 
                            AND NPO_TIPO    = NPO1.NPO_TIPO 
                            AND NPO.D_E_L_E_T_ = ' '
                            AND NPP.D_E_L_E_T_ = ' '
                            AND NPP.NPP_CODDES = '%s' 
                            GROUP BY NPO.NPO_CODIGO, NPP_CODDES, NPP_DESDES, NPP_PERDES, NPP_PESDES) as \"%s\"", 
                            $row['NPP_CODDES'], $row['NPP_DESDES']); 

 

 

ta certo minha logica? tive que colocar no GROUP BY

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente fazer assim:

 

(CAST(SUM(NPP_PERDES) AS VARCHAR)+' - '+CAST(SUM(NPP_PESDES) AS VARCHAR))

 

E tire o group by.

 

@braços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Funcionou tambem, veja os resultados.. juntou 15.3 que seria o campo PERDES e 965 que seria o PESDES.

 

A|15.3 - 965 - B|1.8 - 311 - C| - D|3.5 - 0 - E|0.1 - 0 - F - G| - H| - I|

 

 

se acha legal usar a funcao strzero no php para pegar os numeros do array agora??

Compartilhar este post


Link para o post
Compartilhar em outros sites

strzero?

Desculpe, mas não conheço esta função nativa do PHP... acredito que não exista tal função nativa no PHP.

 

O que você quer fazer?

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.