Ir para conteúdo

POWERED BY:

Arquivado

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

Eduardo Vilarinho

[Resolvido] Consulta PHP + MySQL

Recommended Posts

Pessoal, preciso da ajuda de vocês.

 

Como eu faço para pegar dados de duas tabelas que tem relação entre si e imprimi-los utilizando PHP e MySQL na tela da seguinte maneira:

 

Categoria

Subcategoria

Subcategoria

Categoria

Subcategoria

Subcategoria

Categoria

Subcategoria

Subcategoria

 

TABLE area_administrativa_categorias (id_categoria INT NOT NULL auto_increment, nome_categoria VARCHAR(32) NOT NULL, PRIMARY KEY (id))

 

TABLE area_administrativa_subcategorias (id_subcategoria INT NOT NULL auto_increment, categoria_id INT NOT NULL, nome_subcategoria VARCHAR(32) NOT NULL, endereco_subcategoria VARCHAR(32) NOT NULL, PRIMARY KEY (id))

 

Eu tentei assim, mas só está imprimindo as subcategorias da primeira categoria.

 

 

<?php
include ("conecta_mysql.inc");
$consulta = "SELECT * FROM `area_administrativa_categorias` ORDER BY `nome_categoria` ASC";
$resultado = mysql_query ($consulta) or die ();
$consulta2 = "SELECT * FROM `area_administrativa_subcategorias` ORDER BY `nome_subcategoria` ASC";
$resultado2 = mysql_query ($consulta2) or die ();
while ($categoria = mysql_fetch_array($resultado))
{
echo $categoria['nome_categoria']."<br />";
$id_categoria = $categoria['id_categoria'];
while ($subcategoria = mysql_fetch_array($resultado2))
{
  $categoria_id = $subcategoria['categoria_id'];
  if ($id_categoria == $categoria_id)
  {
   echo "<b>".$subcategoria['nome_subcategoria']."</b><br />";
  }
}
}
?>

 

Obs.: O $id_categoria não está mudando dentro do segundo while, não sei porque.

 

Obrigado desde já a todos pela atenção.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal, preciso da ajuda de vocês.

 

Como eu faço para pegar dados de duas tabelas que tem relação entre si e imprimi-los utilizando PHP e MySQL na tela da seguinte maneira:

 

Categoria

Subcategoria

Subcategoria

Categoria

Subcategoria

Subcategoria

Categoria

Subcategoria

Subcategoria

 

TABLE area_administrativa_categorias (id_categoria INT NOT NULL auto_increment, nome_categoria VARCHAR(32) NOT NULL, PRIMARY KEY (id))

 

TABLE area_administrativa_subcategorias (id_subcategoria INT NOT NULL auto_increment, categoria_id INT NOT NULL, nome_subcategoria VARCHAR(32) NOT NULL, endereco_subcategoria VARCHAR(32) NOT NULL, PRIMARY KEY (id))

 

Eu tentei assim, mas só está imprimindo as subcategorias da primeira categoria.

 

 

<?php
include ("conecta_mysql.inc");
$consulta = "SELECT * FROM `area_administrativa_categorias` ORDER BY `nome_categoria` ASC";
$resultado = mysql_query ($consulta) or die ();
$consulta2 = "SELECT * FROM `area_administrativa_subcategorias` ORDER BY `nome_subcategoria` ASC";
$resultado2 = mysql_query ($consulta2) or die ();
while ($categoria = mysql_fetch_array($resultado))
{
echo $categoria['nome_categoria']."
";
$id_categoria = $categoria['id_categoria'];
while ($subcategoria = mysql_fetch_array($resultado2))
{
  $categoria_id = $subcategoria['categoria_id'];
  if ($id_categoria == $categoria_id)
  {
   echo "<b>".$subcategoria['nome_subcategoria']."</b>
";
  }
}
}
?>

 

Obs.: O $id_categoria não está mudando dentro do segundo while, não sei porque.

 

Obrigado desde já a todos pela atenção.

 

Boa tarde Eduardo.

 

Não conheço muito bem mysql mas você poderia utilizar JOIN e também group by, acho que facilitaria sua tarefa de agrupar por categoria e sub-categoria.

 

Valew.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde Eduardo.

 

Não conheço muito bem mysql mas você poderia utilizar JOIN e também group by, acho que facilitaria sua tarefa de agrupar por categoria e sub-categoria.

 

Valew.

 

 

Olá Henriqued. Eu tentei fazer relação entre tabelas (o que é o certo), mas eu não consegui imprimir o resultado da maneira que eu estou querendo. Se você ou alguem souber, seria muito útil.

 

Outra coisa, esse código quase funciona, porém dentro do segundo while, o id_categoria é sempre o mesmo, por isso não imprime na tela as outras subcategorias. No momento está imprimindo assim:

 

Categoria

Subcategoria

Subcategoria

Categoria

Categoria

Categoria

Categoria

Categoria

Categoria

Categoria

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha, faça somente uma consulta, usando JOIN mesmo, para que ele retorne algo assim.

 

categoria subcategoria

categoria_1 sub_1

categoria_1 sub_2

categoria_1 sub_3

categoria_1 sub_4

categoria_2 sub_1

categoria_2 sub_2

...

 

Aí, na hora de exibir, você faz um if. Mais ou menos assim.

 

$titulo = '';
while ($row = mysql_fetch_assoc($sql))
{
     if ($row['categoria'] != $titulo)
     {
          echo $row['categoria'];
          $titulo = $row['categoria'];
     }
     //aqui você coloca o resto do loop.
}

Ou seja, só vai imprimir a primeira vez que ele passar pela categoria. Se na segunda vez do while a categoria for a mesma, ele não vai imprimir a categoria. Quando mudar a categoria, só vai imprimir uma vez.

 

Mais ou menos isto

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha, faça somente uma consulta, usando JOIN mesmo, para que ele retorne algo assim.

 

categoria subcategoria

categoria_1 sub_1

categoria_1 sub_2

categoria_1 sub_3

categoria_1 sub_4

categoria_2 sub_1

categoria_2 sub_2

...

 

Aí, na hora de exibir, você faz um if. Mais ou menos assim.

 

$titulo = '';
while ($row = mysql_fetch_assoc($sql))
{
     if ($row['categoria'] != $titulo)
     {
          echo $row['categoria'];
          $titulo = $row['categoria'];
     }
     //aqui você coloca o resto do loop.
}

Ou seja, só vai imprimir a primeira vez que ele passar pela categoria. Se na segunda vez do while a categoria for a mesma, ele não vai imprimir a categoria. Quando mudar a categoria, só vai imprimir uma vez.

 

Mais ou menos isto

 

Carlos Eduardo

 

 

Ok. Vou tentar com sua dica. Assim que eu tiver o resultado eu posto aqui. Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Venho dizer que consegui. A dica do amigo Matias Rezende deu certo. Segue abaixo o código que funciona perfeitamente.

 

<?php
include ("conecta_mysql.inc");
$consulta = "SELECT `area_administrativa_subcategorias`.*, `area_administrativa_categorias`.`id` AS `id_categoria`, `area_administrativa_categorias`.`nome_categoria` FROM `area_administrativa_subcategorias` RIGHT JOIN `area_administrativa_categorias` ON `area_administrativa_subcategorias`.`categoria_id` = `area_administrativa_categorias`.`id` ORDER BY `area_administrativa_categorias`.`nome_categoria` ASC";
$resultado = mysql_query($consulta) or die ();
$titulo = '';
while ($linha = mysql_fetch_assoc($resultado))
{
 if ($linha['nome_categoria'] != $titulo)
 {
  echo $linha['nome_categoria']."<br />";
  $titulo = $linha['nome_categoria'];
 }
 echo "<b>".$linha['nome_subcategoria']."</b><br />";
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas agora eu tenho outro problema relacionado. Quando eu coloco o seguinte código formatado em CSS, só aparece a primeira subcategoria de cada categoria, porque o <ul> fecha o segundo if.

 

<?php
         while ($linha = mysql_fetch_assoc($resultado))
   {
    if ($linha['nome_categoria'] != $titulo)
    {
     echo "<h3>".$linha['nome_categoria']."</h3>";
     $titulo = $linha['nome_categoria'];
    }
    echo "<ul>";
    if ($linha['id_categoria'] == $linha['categoria_id'])
    {
     echo "<li><a href=area-administrativa-categorias.php?id=".$linha['id'].">".$linha['nome_subcategoria']."</a></li>";
    }
    else
    {
    }
    echo "</ul>";
   }
   ?>

 

Como eu poderia arrumar isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acabo de resolver o segundo problema. Segue abaixo o código.

 

<?php
include ("conecta_mysql.inc");
$consulta = "SELECT `area_administrativa_subcategorias`.*, `area_administrativa_categorias`.`id` AS `id_categoria`, `area_administrativa_categorias`.`nome_categoria` FROM `area_administrativa_subcategorias` RIGHT JOIN `area_administrativa_categorias` ON `area_administrativa_subcategorias`.`categoria_id` = `area_administrativa_categorias`.`id` ORDER BY `area_administrativa_categorias`.`nome_categoria` ASC";
$resultado = mysql_query($consulta) or die ();
$nome_categoria = '';
$id = 0;
   while ($linha = mysql_fetch_assoc($resultado))
   {
    if ($linha['id_categoria'] != $id)
     echo "</ul>";
    if ($linha['nome_categoria'] != $nome_categoria)
    {
     echo "<h3>".$linha['nome_categoria']."</h3>";
     $nome_categoria = $linha['nome_categoria'];
     echo "<ul>";
    }
    if ($linha['id_categoria'] == $linha['categoria_id'])
    {
     $id = $linha['id_categoria'];
     echo "<li><a href=area-administrativa-categorias.php?id=".$linha['id'].">".$linha['nome_subcategoria']."</a></li>";
    }
    else
    {
    }
   }
?>

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.