Ir para conteúdo

POWERED BY:

Arquivado

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

ivanferrer

SQL- como exibir 1 registro dentro da categoria

Recommended Posts

Como poderia ordenar em um único sql todas as categorias e chamar a única matéria recente dentro de sua respectiva categoria... tipo:

 

categoria: "cidade" - id_categoria:2

1º - materia id:10 - id_categoria:2 (a mais recente da lista)

 

categoria: "novidades" - id_categoria: 3

1º - materia id:20 - id_categoria:3 (a mais recente da lista)

 

...

 

tendo as seguintes tabelas:

//tabela de categorias
CREATE TABLE `tab_categorias` (
 `id_categoria` int(11) NOT NULL AUTO_INCREMENT,
 `categoria` varchar(255) DEFAULT NULL,
 `classe` varchar(255) DEFAULT NULL,
 `url` varchar(255) DEFAULT NULL,
 `slug` varchar(255) DEFAULT NULL,
 `id_pai` int(11) NOT NULL DEFAULT '0',
 `permissao` tinyint(3) NOT NULL DEFAULT '1',
 `ordem` int(11) DEFAULT '1',
 `destaque` tinyint(3) DEFAULT '0',
 `menu_principal` tinyint(3) DEFAULT '0',
 `titulo_selo_destaque_home` varchar(255) DEFAULT NULL,
 PRIMARY KEY (`id_categoria`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;

//tabela de materias
CREATE TABLE `tab_materias` (
 `id_materia` int(11) NOT NULL AUTO_INCREMENT,
 `id_categoria` int(11) DEFAULT NULL,
 `chamada_home` varchar(255) DEFAULT NULL,
 `titulo` varchar(255) DEFAULT NULL,
 `texto` longtext,
 `data` datetime DEFAULT NULL,
 `permissao` tinyint(3) NOT NULL DEFAULT '1',
 `destaque` tinyint(3) DEFAULT '0',
 `exibe_data` tinyint(3) DEFAULT '0',
 `imagem_destaque` varchar(255) DEFAULT NULL,
 PRIMARY KEY (`id_materia`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;

 

tentei isso mas não deu certo a ordenação...

 

Select DISTINCT
   tab_materias.id_materia,
   tab_materias.*,
tab_categorias.id_categoria,
from
  tb_materias,
  tb_categorias
where tab_materias.id_categoria = tab_categorias.id_categoria and tab_materias.permissao=1 group by tab_materias.id_categoria order by tab_materias.id_materia DESC

 

e isso, também não rolou:

SELECT DISTINCT tab_materias.id_categoria, tab_materias.*, tab_categorias.id_categoria FROM tab_materias 
INNER JOIN
tab_categorias ON tab_materias.id_categoria=tab_categorias.id_categoria 
WHERE (tab_categorias.id_pai=$idc OR tab_materias.id_categoria=$idc ) and
tab_materias.permissao=1
GROUP BY tab_categorias.id_categoria DESC,tab_materias.id_categoria ASC
ORDER BY tab_categorias.id_pai ASC,
tab_categorias.ordem ASC,
tab_materias.data DESC,
tab_materias.id_materia DESC,
tab_materias.titulo ASC

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso é uma questão de ordenção e limitação.

Selecione o MAX(id) do que quer e filtre no where a categoria desejada.

Procure identificar as chaves estrangeiras com prefixo ou sufixo FK, fica

mais fácil de entender sua tabela. E poste alguns inserts também. Fica mais

fácil para nós criamos exemplos e lhe explicar.

 

Abraços.

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.