Ordem de exibição de produtos

Enviada por maite sabia 
maite sabia
Ordem de exibição de produtos
27 de July de 2012 às 02:19PM
Olá, cuido de um site que lista vários produtos por categoria e subcategoria.
ex: categoria: sapatos
subcategoria:todos, plataformas, anabelas, rasteiras....

Agora na ordem de exibição desses produtos, ele está listando 1 a categoria, depois o id da subcategoria, só que eu preciso que esses produtos apareçam em ordem alfabética. ex: 1- anabelas, 2- plataformas, 3- rasteiras..

Estou quebrando a cabeça mais nao consigo arrumar isso!
Segue abaixo a parte do código que eu acho que lista a ordem:

$rs = $db->Query("SELECT a.prd_ref, a.prd_sku, a.prd_preco, a.prd_likes
FROM {$db_prefix}_produto AS a
JOIN {$db_prefix}_produto_cor as pc
ON pc.prd_sku=a.prd_sku
JOIN (
select * from {$db_prefix}_cor
order by prioridade desc
) prio
ON prio.cor_id = pc.cor_id
where a.prd_ativo = 1 AND $filtro
group by a.prd_ref
ORDER BY a.prd_colecao desc,a.cat_id,a.subcat_id asc, a.subcat2_id asc, a.prd_salto asc,a.prd_ref, prioridade desc
LIMIT $lim, $colecao_pages");

Já tentei alterar isso mas não deu certo ;(
Alguem tem alguma sugestão?

Obrigada
Alexandre Leonardo
Re: Ordem de exibição de produtos
27 de July de 2012 às 03:08PM
Oi Maria Tereza :)

A query sua não é muito simples não. Mas felizmente ordenação é só questão de mecher na cláusula ORDER BY.
Os campos não são muito cognitivos, então não consegui dar a resposta, mas é simples, você só tem que procurar qual é o campo do nome do produto. Eu acho que ele nem está na ordenação... Vide:

ORDER BY a.prd_colecao DESC,
a.cat_id,
a.subcat_id ASC,
a.subcat2_id ASC,
a.prd_salto ASC,
a.prd_ref,
prioridade DESC

O que você não deve é alterar a ordem dos filtros, senão você acaba ordenando subcategoria na frente da categoria. O que precisa é tirar esses campos de ID e colocar o do nome da categora ou produto, a query ta ordenando por ID, olha ali.
O resultado seria aaaaaalgo, mais ou menos assim:

ORDER BY a.prd_colecao DESC,
a.cat_descricao,
a.subcat_descricao ASC,
a.subcat2_descricao ASC,
a.prd_salto ASC,
a.prd_ref,
prioridade DESC
maite sabia
Re: Ordem de exibição de produtos
27 de July de 2012 às 04:59PM
Oi Alexandre!! muito obrigada pela ajuda!! mas eu sou meia prego nisso ainda, estou aprendendo!

Eu nao sei qual é o campo do nome do produto, onde eu acho isso??
Quero somente mudar a ordem da subcat, entao tiraria o id somente da subcat?

Se eu colocar o nome das sucategorias ex: rasteiras, anabelas e etc ficaria assim?
teria que colocar uma por uma?


ORDER BY a.prd_colecao DESC,
a.cat_id,
a.subcat_id ASC,
a.subcat2_anabela ASC,
a.subcat2_plataforma ASC,
a.subcat2_rasteiras ASC,
a.prd_salto ASC,
a.prd_ref,
prioridade DESC


Obrigadaaa
maite sabia
Re: Ordem de exibição de produtos
27 de July de 2012 às 05:29PM
Alexandre, tentei isso que eu falei acima e não deu certo também!!
tem mais alguma sugestão???

:)
Alexandre Leonardo
Re: Ordem de exibição de produtos
27 de July de 2012 às 06:17PM
Ish, calma, muita calma nessa hora :-)

Olha, o que você está mechendo não é nem PHP, pra falar a verdade. Isso é instrução SQL de um banco de dados chamado MySQL (até aí acho que você sabe).

Bom. Um banco de dados tem tabelas (igual planilha do excel). E cada campo (informação) aqui é como se fosse uma coluna do Excel (A, B, C, etc), e cada linha seria um registro de produto. Ok?

O nome dessas colunas não é padrão igual o Excel, é dado por alguém ao criar o sistema, mas também não é dinamico, então se você colocar "subcat2_anabela " não vai pegar nada. O que deve ter é alguma coluna "subcat2_tipodoproduto" ou "subcat2_tipo", ou algo do gênero.

Adiantando a resposta: você vai ter que usar algum programa-cliente de MySql pra navegar nas tabelas e achar aonde está a informação do tipo do produto, pra que saiba o nome da coluna e possa ordenar por essa.


Complementando a explicação, tente visualizar a informação. Isto é teoria de Modelagem de Dados, toda faculdade pega forte neste tema (espero).
Se eu tenho estes produtos:
3 sapatilhas Moleka azul, uma 36 e duas 37
4 botas Kuturno tamanho 36
1 chinelo Havaianas modelo brazil branco tamanho 40

Pra inicialmente colocar tudo isto em uma planilha (modelar em nível 1), eu teria que dar nomes para as informações e preencher isto entre colunas:

|Quantidade__|Categoria__|Marca____|Detalhe________|_Tamanho__|
1.............Sapatilha...Moleka.....Azul...........36
2.............Sapatilha...Moleka.....Azul...........37
4.............Bota........Kuturno...................36
1.............Chinelo.....Havaianas..Brazil Branco..40


Mas aí dá pra separar mais as informações. O ideal geralmente é nível 3:

Tabela MARCAS
|CodigoMarca__|Marca______|
1.............Moleka
2.............Havaianas
3.............Kuturno

Tabela PRODUTOS
CodigoProduto__|CodigoMarca__|Categoria___|_Detalhe_____|
1...............1.............Sapatilha....Azul.........
2...............3.............Bota......................
3...............2.............Chinelo......Brazil Branco

Tabela ESTOQUE

Quantidade_|CodigoProduto__|Tamanho|
1...........1...............36....
1...........1...............37....
4...........2...............36....
1...........3...............40....


Enfim, as informações em banco de dados são separadas, pra isso usamos JOIN pra reagrupa-las para apresentação. Cabe a você saber qual dado está aonde. Se não houver documentação, só abrindo as tabelas e vendo...

Abraço!





Infelizmente os nomes que deram para as colunas do banco que você está mechendo não é
maite sabia
Re: Ordem de exibição de produtos
31 de July de 2012 às 01:15PM
eu achei isso no banco de dados:

SELECT *
FROM `meusite`.`preview_subcategoria`
WHERE (
`subcat_id` LIKE '%plataformas%'
OR `cat_id` LIKE '%plataformas%'
OR `subcat_nome_pt` LIKE CONVERT( _utf8 '%plataformas%'
USING latin1 )
COLLATE latin1_general_ci
OR `subcat_nome_en` LIKE CONVERT( _utf8 '%plataformas%'
USING latin1 )
COLLATE latin1_general_ci
OR `subcat_nome_es` LIKE CONVERT( _utf8 '%plataformas%'
USING latin1 )
COLLATE latin1_general_ci
)
LIMIT 0 , 30


essa é uma subcategoria, queria que ela aparecesse primeiro de todas....como eu colocaria isso no order by???

obrigadaaaa
maite sabia
Re: Ordem de exibição de produtos
31 de July de 2012 às 01:21PM
eu posso mudar o id de uma categoria no banco de dados? ou isso vai desconfigurar tudo?
Alexandre Leonardo
Re: Ordem de exibição de produtos
31 de July de 2012 às 02:24PM
Olha Maite. Pode ser que seja isso e pode ser que não. E não está parecendo que seja...
Mas é o seguinte, você vai ter que ler algo sobre modelagem de banco de dados e MySQL, não tem jeito.

Tem coisas que dá pra ajudar por aqui. Uma dúvida pontual, talvez...
Pra eu te ajudar você teria que mostrar o mapa do seu banco de dados inteiro. Todas as tabelas e seus campos. E se possível um exemplo de uma ou duas linhas de cada. Pra aí então eu dar uma olhada geral e entender como foi feito a modelagem, pra aíiii então sim, mudar o código.

Mas acho que o foco do fórum é ajudar a aprender. E pra você solucionar isso você vai ter que estudar banco de dados, dominar o básico ao menos.
Por favor entenda que não é má vontade minha por estar falando isto. To tentando te mostrar o caminho.
Você precisa estar logado no PHPBrasil.com para poder enviar mensagens para os nossos fóruns.

Faça o login aqui.