Ir para conteúdo

POWERED BY:

Arquivado

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

Ana Riet

[Resolvido] Inserir PHP dentro da query SQL

Recommended Posts

oi, gente!

 

meu problema é o seguinte... tenho uma página 1 que passa determinados parâmetros de um formulário pra página 2. só que dependendo de quais parâmetros são passados, a query na página 2 muda.

 

na página 1 tenho um select com opções e algumas checkboxes (todos puxados do banco de dados). na página 2, consigo pegar os valores numa boa:

 

<select name="estacoes[]" style="width: 15em" size=6 multiple>
			
			<?
			
			while ($row = mysql_fetch_array($resultado))
			{
				echo "<option value=".$row["codEstacaoUsuario"]." selected>".$row["nomeEstacao"];
			}
			
			?>
			
			</select>

e

 

<?
			
			while ($row = mysql_fetch_array($resultado2))
			{
				echo "	<tr>
							<td>
								<input type='checkbox' name='status[]' value=".$row["codStatus"]." checked>".$row["descrStatus"]."
							</td>
						</tr>";					
			}
			
			?>

na página 2, consigo pegar esses valores na boa:

 

$estacoes = $_POST['estacoes'];

				for ($i=0;$i<count($estacoes);$i++)
		{
			$estacoes[$i];
		}
				
				
		$status = $_POST['status'];
				
		for ($i=0;$i<count($status);$i++)
		{
			$status[$i];
		}

o meu problema é que podem ser passadas 1 ou n estações e 1 ou n códigos de status. e minha query tem que pesquisar utilizando "OR" pra todos eles passados.

 

ou seja, algo mais ou menos assim:

 

select c.codChamado, c.descricao, a.nomeAnalista, sc.descrStatus,
eu.usuario, eu.nomeEstacao,
date_format(c.data,'%d/%m/%Y às %Hh%i') AS data
from chamado c, analista a, statusChamado sc, estacaoUsuario eu
where a.codAnalista = c.fkCodAnalista
and sc.codStatus = c.fkCodStatusChamado
and eu.codEstacaoUsuario = c.fkCodEstacaoUsuario
and (
		fkCodEstacaoUsuario = 1
	or	fkCodEstacaoUsuario = 2
   	or	fkCodEstacaoUsuario = 3
   	or	fkCodEstacaoUsuario = 4
	)
	
and (
		fkCodStatusChamado = 1
   	or 	fkCodStatusChamado = 2
	or 	fkCodStatusChamado = 3
   	or 	fkCodStatusChamado = 4
	)
	
order by c.codChamado

só que, como faço pra inserir na query os códigos que foram passados dinâmicamente delo usuário na página 1?

 

viajando muito (é difícil de explicar), eu queria que existisse uma loucura mais ou menos assim:

 

$query1 = "	select c.codChamado, c.descricao, a.nomeAnalista, sc.descrStatus,
					eu.usuario, eu.nomeEstacao,
					date_format(c.data,'%d/%m/%Y às %Hh%i') AS data
					from chamado c, analista a, statusChamado sc, estacaoUsuario eu
					where a.codAnalista = c.fkCodAnalista
					and sc.codStatus = c.fkCodStatusChamado
					and eu.codEstacaoUsuario = c.fkCodEstacaoUsuario
					and (
							fkCodEstacaoUsuario = '$estacoes[0]'" .
							
						 for ($i=1;$i<count($estacoes);$i++)
						{
							echo "OR fkCodEstacaoUsuario = '$estacoes[$i]';
						}
						
					. "   )
						
					and (
						
												  fkCodStatusChamado =  '$status[0]'" .

					   	for ($i=1;$i<count($status);$i++)
						{
							echo "OR fkCodStatusChamado = '$status[$i]';
						}
						
					. "   )
						
						
					order by c.codChamado";

eu sei que isso é um absurdo e não existe, mas deu pra entender o que eu estou querendo mais ou menos?

 

como eu posso fazer isso, alguém tem idéia? :wacko:

 

agradeço quem puder ajudar!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha só, eu também gosto de "viajar" assim, principalmente agora que eu comecei a estudar PHP... Assim, esse código que você passou não funciona? Bom, eu não tinha como testar e tals, mas pela sua pergunta, não deve funcionar mesmo... Mas pensei no seguinte: e se você fizer esse for fora da query? Tipo, antes de executar a query?

 

Assim, por exemplo:

// for das estações
$for_Estacoes = "";

for ($i = 0; $i < count($estacoes); $i++)
{
	if ($for_Estacoes == "")
	{
		$for_Estacoes .= "'" . $estacoes[" . $i . "] . "'";
	}
	else
	{
		$for_Estacoes .= ",'" . $estacoes[" . $i . "] . "'";
	}
}


// for do Status
$for_Status = "";

for ($i = 0; $i < count($status); $i++)
{
	if ($for_Status == "")
	{
		$for_Status .= "'" . $status[" . $i . "] . "'";
	}
	else
	{
		$for_Status .= ",'" . $status[" . $i . "] . "'";
	}
}


$query1 = "
	SELECT
		c.codChamado, c.descricao, a.nomeAnalista, sc.descrStatus, eu.usuario, eu.nomeEstacao, date_format(c.data,'%d/%m/%Y às %Hh%i') AS data

	FROM
		chamado c, analista a, statusChamado sc, estacaoUsuario eu

	WHERE
		a.codAnalista = c.fkCodAnalista

	AND
		sc.codStatus = c.fkCodStatusChamado

	AND
		eu.codEstacaoUsuario = c.fkCodEstacaoUsuario

	AND
		fkCodEstacaoUsuario IN (" . $for_Estacoes . ")
							
	AND
		fkCodStatusChamado IN (" . $for_Status . ")

	ORDER BY
		c.codChamado

	";
Bom, sei lá, veja se funciona dessa forma... Pelo menos pela lógica funcionaria... http://forum.imasters.com.br/public/style_emoticons/default/assobiando.gif Repito, não tive como testar, ok? Depois me fala se funciona assim ou não (dessa maneira eu vou aprendendo também, né?)

 

Obs.: Eu gosto de separar as variáveis PHP dos comandos SQL, como pode observar (lá no for, por exemplo, você tem o uso da variável $i, veja que eu abro e fecho as aspas só para essa variável, sendo que funcionaria sem elas, mas é que eu sempre faço assim, tenho esse hábito desde quando comecei a programar em PHP... Mas é mania minha mesmo)...

 

Abraço!

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.