Ir para conteúdo

POWERED BY:

Arquivado

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

Lucas Fernando

While dentro de mysql_query

Recommended Posts

Pessoal boa noite,

 

Anteriormente abri um topico na area de SQL porem logo já vi a necessidade de usar o php nessa consulta bem.

 

Estou montando uma consulta SQL na qual preciso usar o CASE, porem os cases devem ser inseridos de forma automatica, a intenção é formar uma tabela dinamica na qual na vertical são mostrados os usuarios e na horizontal os projetos.

 

Quem me deu a ideia do case foi o amigo Motta do forum.

 

Testado em sql funcionou perfeitamente, porem preciso que os cases surjam de forma automatica já que um novo projeto pode surgir a qualquer momento.

 

Eu montei um código porem não está funcionando, na verdade eu não sei se é possivel adicionar um case dentro de um while.

 

Bem deem uma olhada no que fiz.

$busca_pro = mysql_query("select pro.type_id, pro.description,					       dat.type_id, dat.data_date						   From time_types pro, time_data dat						   Where dat.type_id = pro.type_id and 						   dat.data_date between '$start_date' and '$end_date'						   Group by pro.type_id						   order by pro.type_id")or die(mysql_error());//faz a busca com os projetos do periodo											/*while ($result = mysql_fetch_array($busca_pro)) { 	   print "sum(case when pro.type_id = '$result[type_id]' then dat.hours else '' end) '$result[description]',<br>"; 	   	   }  Aqui constatei que o While está funcionando pois retorna os valores corretos.*/				$result_pro = mysql_query ("select dat.user_id, dat.type_id, dat.hours pro.type_id,                           pro.description,	usr.user_id, usr.fname,				       "	   while (@$result = mysql_fetch_array($busca_pro)) { "	   sum(case when pro.type_id = '$result[type_id]' then dat.hours else 0 end) '$result[description]', 	   " } "	   sum(case when pro.type_id = '000010' then 1 else 0 end) 'UTC BASUL CARREG'       from time_data dat, time_types pro, user_info usr       where dat.type_id = pro.type_id       AND usr.user_id = dat.user_id AND	   dat.data_date between '$start_date' and '$end_date'       group by dat.user_id")or die(mysql_error());//faz a busca com os projetos do periodo

 

 

Pessoal tem algo que eu possa usar fora o case ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seria interessante utilizar uma tabela de position_menu

colocar as posições nos mesmo.

 

uma chamada menu e interligar o menu na position_menu

 

assim, fazeria apenas X consultas e pronto. exemplo.

 

select [campos_necessarios] from position_menu WHERE posicao = 'topo'

select [campos_necessarios] from position_menu WHERE posicao = 'horizontal'

select [campos_necessarios] from position_menu WHERE posicao = 'vestical'

 

e pronto.

 

:D

 

quando for adicionar dados escolhe a posição que ou categoria e a categoria está em uma posicao do menu.

 

 

 

Mas no caso desse problema e possivél sim usar um case dentro do while porem e melhor um if, elseif e else.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ainda pensando no que eu estava fazendo, é possível criar uma variável para trazer todos os valores de um while ?

 

 

começei a fuçar e acabei nisso:

 

 

$busca_pro = mysql_query("select pro.type_id, pro.description,					       dat.type_id, dat.data_date						   From time_types pro, time_data dat						   Where dat.type_id = pro.type_id and 						   dat.data_date between '$start_date' and '$end_date'						   Group by pro.type_id						   order by pro.type_id")or die(mysql_error());//faz a busca com os projetos do periodo												$n=0; //Marca loops	   while ($result = mysql_fetch_array($busca_pro)) { 	   $variavel[$n] = "sum(case when pro.type_id = '$result[type_id]' then dat.hours else null end) '$result[description]',<br>"; 	   $n++;	   } 		$resultado = print_r($variavel);

Estou conseguindo printar na tela.

 

Porem como estou usando print_r o resultado mostrado é esse

 

Array (

[0] => sum(case when pro.type_id = '000001' then dat.hours else null end) 'TESTE1',

[1] => sum(case when pro.type_id = '000049' then dat.hours else null end) 'TESTE2',

[2] => sum(case when pro.type_id = '000115' then dat.hours else null end) 'TESTE3',

 

Tem como remover o array do print (array) [0][1]etc.

 

 

Bem a primeira parte eu consegui !

 

 

 

Apesar de ser um pouco "gambiarra" acabou ficando assim:

$busca_pro = mysql_query("select pro.type_id, pro.description,					       dat.type_id, dat.data_date						   From time_types pro, time_data dat						   Where dat.type_id = pro.type_id and 						   dat.data_date between '$start_date' and '$end_date'						   Group by pro.type_id						   order by pro.type_id")or die(mysql_error());//faz a busca com os projetos do periodo												$n=0; //Marca loops	   while ($result = mysql_fetch_array($busca_pro)) { 	   	   $case[$n] = "sum(case when pro.type_id = '$result[type_id]' then dat.hours else null end) '$result[description]',"; 	   $formatado = implode("", $case);	   	   $n++;	   	   	   } 		   				$result_pro = mysql_query ("select dat.user_id, dat.type_id, dat.hours, pro.type_id,       pro.description,	usr.user_id, usr.fname, usr.lname, $formatado	   sum(case when pro.type_id like '%%'  then dat.hours else null end) 'Total'       from time_data dat, time_types pro, user_info usr       where dat.type_id = pro.type_id       AND usr.user_id = dat.user_id AND	   dat.data_date between '$start_date' and '$end_date'       group by dat.user_id")or die(mysql_error());//faz a busca com os projetos do periodo*/

Agora só ta faltando colocar os resultados na tabela, mais um desafio kkkk.

 

 

Pessoal como eu falei acima eu resolvi uma parte porem, agora estou quebrando a cabeça no fetch_array, como o select é dinamico e podem existir vários cases, não estou sabendo como fazer para aparecer na tela.

 

 

 

Alguem tem alguma dica ?

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.