Ir para conteúdo

POWERED BY:

Arquivado

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

diogomancha

[Resolvido] consulta dentro doutra consulta.

Recommended Posts

Boa tarde,

Seguinte, estou precisando realizar uma consulta dentro doutra consulta.

A logica e a seguinte, tenho uma tabela chamada incidentes, e outra chamada andamentos.

 

Na tabela andamentos existe a coluna incidente para inserir o id do incidente.

 

Seguinte, precisarei realizar a consulta na tabela incidentes, listando todas sucessivamente, mas dentro dessa consulta precisarei listar todos os andamentos relacionados àqueles incidentes.

 

Se funcionasse seria perfeito algo assim:

 

$sql = "SELECT * FROM incidente WHERE processo = '".$id."' ORDER BY data DESC ";



$resultado = mysql_query($sql)
or die ("Não foi possível realizar a consulta ao banco de dados");
while ($linha=mysql_fetch_array($resultado)) {

$incidente = $linha["incidente"];
$incidentecompleto = $linha["incidentecompleto"];
$usuario = $linha["usuario"];

echo '<table width="100%" border="0">';
echo ' <tr>';
echo ' <td class="branco">'.$incidente.'</td>';
echo ' <td class="branco">EDITAR </td>';
echo ' </tr>';
echo ' <tr>';
echo ' <td colspan="2" class="brancoitalico">'.$incidentecompleto.' - Cadastrado por '.$usuario.'</td>';
echo ' </tr>';

$sql = "SELECT * FROM andamentos WHERE incidente = '".$idandamento."' ORDER BY data DESC ";

$resultado = mysql_query($sql)
or die ("Não foi possível realizar a consulta ao banco de dados");
while ($linha=mysql_fetch_array($resultado)) {

$andamento = $linha["andamento"];

echo ' <tr>';
echo ' <td colspan="2">'.$andamento.'<a href="editarandamento.php?id='.$id.'">[editar]</a></td>';
echo ' </tr>';
}

echo '</table>';
}

 

Obrigado por enquanto.

 

Diogo

Compartilhar este post


Link para o post
Compartilhar em outros sites

seria isso?

SELECT 
  * 
FROM 
  `andamentos` 
WHERE 
  `incidente` 
IN (
  SELECT 
     `incidente` 
  FROM 
     `incidente` 
  WHERE 
     `processo` = '{$id}') 
ORDER BY 
  `data` 
DESC 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Creio que desta forma não funcionará, pois eu preciso primeiro listar os incidentes, e dentro desta listagem exibir os andamentos daqueles incidentes. Algo assim:

 

Select * FROM incidentes WHERE idprocesso = '$idprocesso'

Incidente 1(tabela incidentes)

Select * FROM andamentos WHERE idincidente = '$idincidente'

- Andamento 1 do incidente 1(tabela andamentos)

- Andamento 2 do incidente 1

Select * FROM incidentes WHERE idprocesso = '$idprocesso'

Incidente 2(tabela incidentes)

Select * FROM andamentos WHERE idincidente = '$idincidente'

- Andamento 1 do incidente 2 (tabela andamentos)

Select * FROM incidentes WHERE idprocesso = '$idprocesso'

Incidente 3(tabela incidentes)

Select * FROM andamentos WHERE idincidente = '$idincidente'

- Andamento 1 do Incidente 3(tabela andamentos)

- Andamento 2 do Incidente 3

 

O problema é que eu não posso prever quantos incidentes e quantos andamentos vão ter para cada incidentes, por isso não da pra construir algo fixo, precisa, necessariamente, ser dinâmico.

 

 

Obrigado pela ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Apresenta algum erro?

 

Mas pelo pouco que observei no seu código, existe uma duplicidade de váriáveis nos While's( while ($linha=mysql_fetch_array($resultado))).

 

A variável $linha e $resultado se repete no 2 whiles, tente mudar as variáveis do segundo While.

 

att,

Compartilhar este post


Link para o post
Compartilhar em outros sites

talvez assim

SELECT  
  a.*,
  i.*
FROM  
  `andamentos` a  
LEFT JOIN
  `incidentes` i
ON
  a.`incidente` = i.`incidente`
WHERE  
  i.`processo` = '{$id}'     
ORDER BY  
  a.`data`  
DESC 

 

join

Compartilhar este post


Link para o post
Compartilhar em outros sites

Perfeito, o erro dava-se em razão da duplicidade dos valores das whiles.

 

Quanto ao INNER JOIN ele é útil em outras ocasiões, como exemplo duas tabelas interligadas por uma coluna. Produto ID, NOME Estoque ID, IDPRODUTO.

 

Obrigado a todos.

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.