Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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.
>
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
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
>
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!
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 />";
}
?>Beleza. Que bom que resolveu. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif
Carlos Eduardo
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?
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
{
}
}
?>
>
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.
while ($categoria = mysql_fetch_array($resultado)) { while ($subcategoria = mysql_fetch_array($resultado2)) {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.