Jump to content
JFernandesVR

Mostrar Categorias e Numero que cada contem PHP MYSQL

Recommended Posts

JFernandesVR

Boas Pessoal.

Tou com uma dúvida.

basicamente o que eu quero é que apareça uma lista com as varias subfamilias.

isso eu já fiz e ta a funcionalr.

agora, queria inserir o numero total de produtos que cada subfamilia tem.

queria que me aparecesse algo do género

subfmilia xpto (x produtos)

subfmilia ypto (y produtos)

onde subfamilia esta alinhado a esquerda e o numero de produtos alinhado a direita

aqui vai o meu código

function listarsubFamilias($Familia)
{
      $SID = SID;
      $sql = "SELECT Nome, ID FROM subfamilias WHERE FamPrincipal = (SELECT Nome FROM familias WHERE ID = " . $Familia . ") ORDER BY Nome ASC";
      $rs=$this->bd->executarSQL($sql);
      $n=0;
      $id=1;
      while(mysql_fetch_row($rs))
      {
             $num = $n +1;
             $id = mysql_result($rs, $n, "ID");
             echo ("<b><a href=Subfamilia.php?". $SID . "&id=" . $id . ">·</b> ".mysql_result($rs, $n, "Nome")."</a>");
             echo "<hr>";

             $n++;
      }
}

os produtos estão noutra tabela que contem um campo de nome subfamilia

Edited by Rui Carlos

Share this post


Link to post
Share on other sites
spcl

o que iras ter de fazer e uma ligacao entre tabelas, algo tipo assim:

$sql=mysql_query("select subfamilias,nomem, subfamilias.id, produtos.id, produtos.id_subfamilia where subfamilias.id=produtos.id_subfamilia");

depois disto faras o $count = mysql_num_rows($sql); para contares o numero de registros que o select encontrou, isto podera dar alguns problemas pois a meu ver os nomes que tu deste aos campos forao um pouco semelhantes entre tabelas, por exemplo usaste id na tabela produtos e na subfamilias

o que deves fazer sempre quando constróis a bd é fazer algo do tipo

tens a tabela produtos colocas assim os campos:

id_protudo_nome da tabela... assim em todas as tabelas os campos terao nomes diferentes, mas como nao fizeste assim existe agora outra maneira, um pouco a pedreiro mas o que interessa e o resultado:

fazes um ciclo ao puxar as subfamilias e dentro colocas outro sql onde seleciones os produtos em que a subfamilia tem aquele id, ex:

$sql_subfamilias=mysql_query("select * from subfamilias");

while($line_subfamilias=mysql_fetch_array($sql_subfamilias)){
 $id_subfamilia=$line_subfamilias['nome do campo id na bd ex id_familia'];

 // depois de teres isto podes proceder a outra parte, a contagem dos produtos ex:
 $sql_produtos=mysql_query("select * from produtos where id_subfamilias='$id_subfamilia'"):

 // agora aqui contas os dados
 $numero_de_produtos=mysql_num_rows($sql_produtos);
}

Penso que e isto que desejas, espero ter ajudado

Edited by Rui Carlos
GeSHi

Share this post


Link to post
Share on other sites
HappyHippyHippo
 select subfamilia,
        count(subfamilia) as quantidade
   from produtos
group by subfamilia


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
JFernandesVR

 select subfamilia,
	 count(subfamilia) as quantidade
from produtos
group by subfamilia

insiro isso no select que eu tenho? ou crio um novo?

Share this post


Link to post
Share on other sites
JFernandesVR
o que iras ter de fazer e uma ligacao entre tabelas, algo tipo assim:

$sql=mysql_query("select subfamilias,nomem, subfamilias.id, produtos.id, produtos.id_subfamilia where subfamilias.id=produtos.id_subfamilia");

depois disto faras o $count = mysql_num_rows($sql); para contares o numero de registros que o select encontrou, isto podera dar alguns problemas pois a meu ver os nomes que tu deste aos campos forao um pouco semelhantes entre tabelas, por exemplo usaste id na tabela produtos e na subfamilias

o que deves fazer sempre quando constróis a bd é fazer algo do tipo

tens a tabela produtos colocas assim os campos:

id_protudo_nome da tabela... assim em todas as tabelas os campos terao nomes diferentes, mas como nao fizeste assim existe agora outra maneira, um pouco a pedreiro mas o que interessa e o resultado:

fazes um ciclo ao puxar as subfamilias e dentro colocas outro sql onde seleciones os produtos em que a subfamilia tem aquele id, ex:

$sql_subfamilias=mysql_query("select * from subfamilias");

while($line_subfamilias=mysql_fetch_array($sql_subfamilias)){
 $id_subfamilia=$line_subfamilias['nome do campo id na bd ex id_familia'];

 // depois de teres isto podes proceder a outra parte, a contagem dos produtos ex:
 $sql_produtos=mysql_query("select * from produtos where id_subfamilias='$id_subfamilia'"):

 // agora aqui contas os dados
 $numero_de_produtos=mysql_num_rows($sql_produtos);
}

Penso que e isto que desejas, espero ter ajudado

fiz como disseste mas aparece este erro

Warning: mysql_affected_rows() expects parameter 1 to be resource, string given in/home/******/public_html/Classes PHP/Class.php on line 264

Edited by Rui Carlos

Share this post


Link to post
Share on other sites
HappyHippyHippo

insiro isso no select que eu tenho? ou crio um novo?

o que achas que o SQL faz ?


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
JFernandesVR

function listarsubFamilias($Familia)
{
   $SID = SID;
   $sql = "SELECT Nome, ID FROM subfamilias WHERE FamPrincipal = (SELECT Nome FROM familias WHERE ID = " . $Familia . ") ORDER BY Nome ASC";
   $rs=$this->bd->executarSQL($sql);
   $n=0;
   $id=1;
   while(mysql_fetch_row($rs)) {
       $num = $n +1;
       $id = mysql_result($rs, $n, "ID");

       echo ("<b><a href=Subfamilia.php?". $SID . "&id=" . $id . ">·</b> ".mysql_result($rs, $n, "Nome")."</a>");

       $sql2= "SELECT SubfamiliaPT, count(SubfamiliaPT) AS quantidade FROM artigos GROUP BY SubfamiliaPT";
       $resultado=mysql_query($sql2);
       $numero=mysql_num_rows($resultado);

       echo "$numero";

       echo "<hr>";

       $n++;
   }
}

fiz assim, e lista-me sempre o mesmo numero

Edited by Rui Carlos

Share this post


Link to post
Share on other sites
HappyHippyHippo

o sql

 SELECT SubfamiliaPT,
        count(SubfamiliaPT) AS quantidade
   FROM artigos
GROUP BY SubfamiliaPT

já te retorna toda a informação de uma vez (claro que terás vários registos !!!)


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
JFernandesVR

o que tenho de fazer para por o numero correto?

lista me todas as subfamilias com o mesmo numero de artigos

Share this post


Link to post
Share on other sites
HappyHippyHippo

o código que apresentaste acima não tem sentido nenhum

faz output dos registos retornados


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
Rui Carlos

A query devolve-te uma tabela que associa o número de artigos a cada família.

Tu estás apenas a ir buscar o número de linhas dessa tabela, o que nesta query não tem interesse nenhum. O que te interessa é o conteúdo da tabela, não o número de linhas.

Vais precisar de ler os valores da tabela para obteres o que pretendes.

Não sei qual é a estrutura das tabelas, mas era capaz de ser boa ideia fazeres apenas um query, de modo a ficares com todos os resultados na mesma tabela, e só teres de iterar sobre essa tabela.

A query devia ficar algo deste género:

SELECT subfamilias.Nome, subfamilias.ID, count(*) AS quantidade
FROM subfamilias INNER JOIN artigos ON artigos.SubfamiliaPT = subfamilias.nome
WHERE FamPrincipal = (SELECT Nome FROM familias WHERE ID = '...')
GROUP BY subfamilias.Nome
ORDER BY subfamilias.Nome ASC

Já agora, fico com a ideia que estás a ligar as tabelas por nomes, em vez de usares os IDs, o que não costuma dar bom resultado. (Neste caso, até parece estar a obrigar-te a uma subquery, se bem que era evitável.)

Share this post


Link to post
Share on other sites
JFernandesVR

A query devolve-te uma tabela que associa o número de artigos a cada família.

Tu estás apenas a ir buscar o número de linhas dessa tabela, o que nesta query não tem interesse nenhum. O que te interessa é o conteúdo da tabela, não o número de linhas.

Vais precisar de ler os valores da tabela para obteres o que pretendes.

Não sei qual é a estrutura das tabelas, mas era capaz de ser boa ideia fazeres apenas um query, de modo a ficares com todos os resultados na mesma tabela, e só teres de iterar sobre essa tabela.

A query devia ficar algo deste género:

SELECT subfamilias.Nome, subfamilias.ID, count(*) AS quantidade
FROM subfamilias INNER JOIN artigos ON artigos.SubfamiliaPT = subfamilias.nome
WHERE FamPrincipal = (SELECT Nome FROM familias WHERE ID = '...')
GROUP BY subfamilias.Nome
ORDER BY subfamilias.Nome ASC

Já agora, fico com a ideia que estás a ligar as tabelas por nomes, em vez de usares os IDs, o que não costuma dar bom resultado. (Neste caso, até parece estar a obrigar-te a uma subquery, se bem que era evitável.)

e como mostro o numero de artigos?

Share this post


Link to post
Share on other sites
Rui Carlos

Tenta perceber a query, e ficas com a resposta a essa pergunta.

O primeiro passo poderá ser executares a query directamente, e ver que valores te aparecem no resultado.

(Atenção ao WHERE ID = '...', que precisa de ser corrigido.)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.