Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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 ?
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.
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 ?
Amigos, ainda não consegui resolver esse problema.
Não estou imaginando um jeito de montar essa logica.
Ninguem pode me ajudar ?
quem sabe um if, elseif e else