Ir para conteúdo

POWERED BY:

Arquivado

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

asanoli

[Resolvido] Agrupar e colocar em ordem ascendente

Recommended Posts

Pessoal,

 

Já tentei de várias maneiras e não consegui. É o seguinte:

 

1. Preciso selecionar em uma tabela de produtos um determinado TIPO (pintura) e agrupá-los por CATEGORIA.

 

2. Com o resultado dessa consulta, preciso pegar na tabela de categorias os seus respectivos NOMES DAS CATEGORIAS ordená-los de forma crescente.

 

O que está acontecendo é que não sai em ordem crescente do nome (alfabética). Está ordenando pelo ID da categoria.

 

$busca=mysql_query("select * from trabalhos where ativo='1' and tipo='1' group by categoria");
while ($res=mysql_fetch_array($busca))
{
$acategoria=$res['categoria'];

$sql=mysql_query("select * from categoria where codigo='$acategoria' order by categoria asc");
while ($res=mysql_fetch_array($sql))
{
$telacategoria=$res['categoria'];
$codigo=$res['codigo'];
O site é esse: www.sergioesteban.com e a parte a que se refere é o MENU DE PINTURA SOBRE TELA, que deveria estar relacionado em ordem alfabética.

 

Agradeço qualquer ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Alexandre, seu SELECT não tem erro nenhum.....mas se você colocar apenas "ORDER BY categoria", ele retornará em ordem alfabética já......ou seja....o "asc" no select é desnecessário e ele mesmo pode estar provocando uma confusão na busca.

 

Tente apenas

"SELECT * FROM categoria WHERE codigo = '$acategoria' ORDER BY categoria"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Alexandre, seu SELECT não tem erro nenhum.....mas se você colocar apenas "ORDER BY categoria", ele retornará em ordem alfabética já......ou seja....o "asc" no select é desnecessário e ele mesmo pode estar provocando uma confusão na busca.

 

Tente apenas

"SELECT * FROM categoria WHERE codigo = '$acategoria' ORDER BY categoria"

De fato, tanto faz estar com o "asc" ou não. Tirei, mas não resolveu. Alguém mais saberia dizer qual a solução???

Compartilhar este post


Link para o post
Compartilhar em outros sites

precisa ser colocado nos 2 query's o ASC

 

$busca=mysql_query("select * from trabalhos where ativo='1' and tipo='1' group by categoria ASC");
while ($res=mysql_fetch_array($busca))
{
$acategoria=$res['categoria'];

$sql=mysql_query("select * from categoria where codigo='$acategoria' order by categoria ASC");
while ($res=mysql_fetch_array($sql))
{
$telacategoria=$res['categoria'];
$codigo=$res['codigo'];

Compartilhar este post


Link para o post
Compartilhar em outros sites

precisa ser colocado nos 2 query's o ASC

 

$busca=mysql_query("select * from trabalhos where ativo='1' and tipo='1' group by categoria ASC");
while ($res=mysql_fetch_array($busca))
{
$acategoria=$res['categoria'];

$sql=mysql_query("select * from categoria where codigo='$acategoria' order by categoria ASC");
while ($res=mysql_fetch_array($sql))
{
$telacategoria=$res['categoria'];
$codigo=$res['codigo'];
Fiz conforme você sugeriu... Continua do mesmo jeito!

Compartilhar este post


Link para o post
Compartilhar em outros sites

precisa ser colocado nos 2 query's o ASC

 

$busca=mysql_query("select * from trabalhos where ativo='1' and tipo='1' group by categoria ASC");
while ($res=mysql_fetch_array($busca))
{
$acategoria=$res['categoria'];

$sql=mysql_query("select * from categoria where codigo='$acategoria' order by categoria ASC");
while ($res=mysql_fetch_array($sql))
{
$telacategoria=$res['categoria'];
$codigo=$res['codigo'];
Fiz conforme você sugeriu... Continua do mesmo jeito!

 

Cara... você tem que fazer a consulta usando INNER JOIN em vez de fazer 2 loop's no PHP. Com isso você economiza memória e processamento...

 

select

t.*,

c.*

from

trabalhos t

inner join categoria c on c.codigo = t.categoria

where

t.ativo='1' and

t.tipo='1'

group by t.categoria

order by t.categoria ASC

 

Lembre-se que com o "group by" você agrupa os dados e com o

"order by" é que você classifica os dados!

 

qquer coisa posta ai...

espero ter ajudado!

abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

precisa ser colocado nos 2 query's o ASC

 

$busca=mysql_query("select * from trabalhos where ativo='1' and tipo='1' group by categoria ASC");
while ($res=mysql_fetch_array($busca))
{
$acategoria=$res['categoria'];

$sql=mysql_query("select * from categoria where codigo='$acategoria' order by categoria ASC");
while ($res=mysql_fetch_array($sql))
{
$telacategoria=$res['categoria'];
$codigo=$res['codigo'];
Fiz conforme você sugeriu... Continua do mesmo jeito!

 

Cara... você tem que fazer a consulta usando INNER JOIN em vez de fazer 2 loop's no PHP. Com isso você economiza memória e processamento...

 

select

t.*,

c.*

from

trabalhos t

inner join categoria c on c.codigo = t.categoria

where

t.ativo='1' and

t.tipo='1'

group by t.categoria

order by t.categoria ASC

 

Lembre-se que com o "group by" você agrupa os dados e com o

"order by" é que você classifica os dados!

 

qquer coisa posta ai...

espero ter ajudado!

abs

 

Ricardo, eu até tinha pensado nessa solução, mas acho que não soube empreender.

 

Fiz o que você propôs:

 

$busca=mysql_query("

select * from trabalhos, categoria where 
trabalhos.ativo='1' and 
trabalhos.tipo='1' 
inner join trabalhos.categoria=categoria.codigo 
group by trabalhos.categoria order by categoria.categoria asc

");

while ($res=mysql_fetch_array($busca))

{

$categoria=$res['categoria.categoria'];
$codigo=$res['categoria.codigo'];

Tá voltando um warning:

 

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/zeufesta/public_html/sergioesteban/cabecalho.php on line 55

A linha 55 é a do while. Não consegui achar o erro.

 

Nas duas tabelas tem um campo chamado "categoria". Será que isso atrapalha?

Compartilhar este post


Link para o post
Compartilhar em outros sites

RESOLVIDO

 

 

include "conexao.php";

$busca=mysql_query("select * from trabalhos, categoria where trabalhos.categoria=categoria.codigo and trabalhos.ativo='1' and trabalhos.tipo='1'  group by trabalhos.categoria order by categoria.categoria asc");
while ($res=mysql_fetch_array($busca))
{
$categoria=$res['categoria'];
$codigo=$res['codigo'];

Obrigado aos que ajudaram!

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.