Ir para conteúdo

Arquivado

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

  • 0
yorigames

[Duvida] Como consultar só as categorias que existam itens cadastrados ?

Pergunta

Ola, boa note. Bom sou novo no forum. Ainda irei contribuir, mas hoje precisando de uma ajuda pra resolver um problema com uma consulta.

 

Eu estou criando um menu com as categorias ( ao clicar em um categoria ele vai filtrar apenas os produtos daquela categoria ) até ai tudo certo, porem na hora que eu chamo as categoria ele também chama as categoria sem nenhum produto cadastrado. Lembrando que o id da categoria esta indo pra dentro da tabela de produtos.

Alguém pode me ajudar a resolver essa consulta e listar apenas as categorias onde existe produtos cadastrados ? OBRIGADO DESDE JÁ!

Compartilhar este post


Link para o post
Compartilhar em outros sites

3 respostas a esta questão

Recommended Posts

Olá,

As tabelas possui relacionamentos? Voce pode resolver utilizando INNER JOIN.

Algo do tipo

select categoria,produto
from cateroria a
inner join produtos b
on a.idCategoria = b.idCategoria

Altere a consulta conforme sua necessidade!

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Do jeito que o amigo explicou seria melhor, mas como você disse que é iniciante, segue essa 'gambiarra' que faz isso, entenda como que é a lógica, ai você consegue fazer de jeitos melhores.

<?php
$conecta = "SUA CONECAO COM O BANCO";

$sql_Prod = "SELECT categoria FROM produtos GROUP BY categoria";
$rs_Prod = $conecta->query($sql_Prod);

$sql_Cat = "SELECT id,categoria_nome FROM categorias
$rs_Cat = $conecta->query($sql_Cat);

while($row_Cat = mysqli_fetch_array($rs_Cat)){
	$ID_CAT = $row_Cat['id'];
    $CATEGORIA = $row_Cat['categoria_nome'];
    while($row_Prod = mysqli_fetch_array($rs_Prod)){
    	$CAT_PROD = $row_Prod['categoria'];    
        
    	if($ID_CAT == $CAT_PROD){
        	echo $CATEGORIA;
        }else{
        	//NADA
        }
    }
}

 

 

 

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
<?php
  $buscar_categ = $conexao->prepare("SELECT * FROM categoria_produtos AS c INNER JOIN produtos AS p ON c.id_categoria_produtos = p.categoria_produto");
  $buscar_categ->execute();
?>
<ul class="categorias-produto">
  <li><a href="?pag=produtos">Todas as Categorias</a></li>
  <?php
  	while($res_categ = $buscar_categ->fetch(PDO::FETCH_ASSOC)){
  ?>
  <li><a href="?pag=categoria_produtos/<?php echo $res_categ['id_categoria_produtos']; ?>"><?php echo $res_categ['titulo_categoria_produtos']; ?></a></li>
  <?php } ?>
</ul>

Acima vai o meu código, fiz como o Faabiianooc e funcionou, porem esta listando mais de 1 vez a mesma categoria de acordo com a quantidade de produtos cadastrada em cada categoria isso se deve as outras categorias também. E ai clicar na categoria no menu, esta listando apenas a categoria clicada. Podem me ajudar a ajeitar isso ? Obrigado pela ajuda até agora.

produtos.png

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por william_droops
      Tenho uma consulta em um banco de dados que traz produtos 
       ID | Cod | Produto
      1   | XX    |  produtoA
      2   |yy      | produtob
       
       Depois preciso consultar em outro banco, usando este resultado na condição IN ('XX'; 'yy') 
       
    • Por hwrry
      Boa tarde! Estou com o seguinte problema, ao realizar uma consulta SQL simples, na primeira execução os registros são trazidos normalmente, porém quando executo a mesma consulta novamente sem realizar nenhuma alteração, o SQL Developer não traz nenhum registro, só trazendo novamente caso eu insira uma quebra de linha ou faça qualquer alteração que não modifique o resultado da consulta. Não consegui entender o porque desse problema estar ocorrendo, pois as consultas estavam normais até a semana passada. Cheguei a pesquisar sobre esse BUG mas não consegui encontrar nada, também executei a mesma consulta em um banco de dados teste que possui as mesmas configurações e registros do banco de produção e o problema não ocorreu. Alguém já passou por esse tipo de problema? Qualquer duvida estou a disposição.
    • Por marcosmigueloliveira
      Ola pessoal estou efetuando uma consulta dinâmica no banco utilizando checkbox.
      Pesquisei alguns códigos aqui no forum e em outros locais e consegui fazer a consulta.
      MAs então estou com um problema, como a minha tabela possui chaves estrangeiras em determinados campos o retorno vai ser o código e não o nome que esta na outra tabela.
       
      Estou enviando o codigo quem puder me ajudar muito obrigado!
      $tipoMaterial = $_POST['tipoMaterial']; $criterio = " WHERE "; for($i = 0; $i < count($tipoMaterial); $i++) { switch ($tipoMaterial[$i]) { case '2': $criterio .= "m.MtCodMaterial = ".$tipoMaterial[$i]." OR "; break; case '1': $criterio .= "m.MtCodMaterial = ".$tipoMaterial[$i]." OR "; break; case '3': $criterio .= "m.MtCodMaterial = ".$tipoMaterial[$i]." OR "; break; case 'all': $criterio = ""; break; } } $criterio = substr($criterio, 0, -3); $campos = array( 'MtCodigo' => 'Código', 'MtCodLoc' => 'Local de Estoque', 'MtCodProjeto' => 'Projeto', 'MtCodEspMnt' => 'Especilidade', 'MtPn' => 'PN', 'MtSn' => 'SN', 'MtPatrimonio' => 'Patrimônio', 'MtNome' => 'Nome', 'MtObs' => 'Obs.', 'MtQuantidade' => 'Qtd. Estoque', 'MtCodMaterial' => 'Tipo de Material'); if(isset($_POST['campos'])) { $selecionados = $_POST['campos']; //retorna somente os campos que existem na variavel $campos $permitidos = array_intersect($selecionados, array_keys($campos)); $query = "SELECT " . implode(', ', $permitidos) . " FROM tb_material as m \r INNER JOIN tb_localizacao l ON m.MtCodLoc = l.LcCodigo \r INNER JOIN tb_projeto p ON m.MtCodProjeto = p.PrCodigo \r INNER JOIN tb_tipoMaterial t ON m.MtCodMaterial = t.TmCodigo \r INNER JOIN tb_espec_mnt e ON m.MtCodEspMnt = e.EmCodigo $criterio"; //somente para testar o formulario echo "<br><br><br><br>"; //echo $query; } ?> <table> <tr> <?php //echo $query; //imprime o cabeçalho foreach ($permitidos as $nome) echo "<th>". $campos[$nome] . "</th>"; ?> </tr> <?php //realiza a consulta $result = mysql_query($query) or die (mysql_error()); //imprime os resultados print_r($result); while($valores = mysql_fetch_row($result)) { ?> <tr> <?php foreach($valores as $valor) print_r($valores); echo "<td class=\"celula\">".$valor."</td>"; ?> </tr> <?php } ?> Os campos que são chave estrangeira estão nos INNER JOINS.
      Sei que devo puxar o nome deles na outra tabela mas não estou sabendo fazer isso.
       
      Alguem tem como me ajudar!
       
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.