Ir para conteúdo

POWERED BY:

Arquivado

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

Good

Agrupar e limitar registros

Recommended Posts

Tenho uma tabela chamada conteudos, com coluna id, titulo, data, categoria.

 

Quero fazer a listagem de 3 registros agrupado pela coluna categoria.

 

Ex:

 

Categoria 1: título 1

Categoria 1: título 2

Categoria 1: título 3

Categoria 2: título 4

Categoria 2: título 5

Categoria 2: título 6

Categoria 3: título 7

Categoria 3: título 8

Categoria 3: título 9

SELECT * FROM conteudos GROUP BY categoria LIMIT 3
Deu pra entender?

Compartilhar este post


Link para o post
Compartilhar em outros sites

SELECT categoria , titulo

 

FROM conteudos

GROUP BY categoria , titulo

 

Isto !?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não quero agrupar título.. título é algo que sempre vai ser diferente. Esta é uma tabela de notícias..

 

A query tem que exibir apenas 3 registros de cada categoria..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então amigo, creio que cabe um distinct aí nas categorias limitando por 3 e agrupando. Assim ele trará de cada categoria apenas 1 notícia.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz uma SQL que te atende, mas fica o aviso, rodei localmente numa tabela com mais de 600000 registros, o tempo de execução dessa query é alto (mesmo com os índices criados), vou deixar a consulta pra que alguém consiga algo a partir dela, ou até quem sabe melhorar seu desempenho.

 

SELECT
  @CAT categoria_anterior,
  categoria,
  id,
  data,
  @COUNT:= IF( id_categoria = @CAT, @COUNT+1, 1) cont,
  @CAT:= id_categoria nova_categoria_anterior
FROM (
  SELECT
    categoria,
    id,
    data
  FROM
    conteudos
  ORDER BY
    categoria ASC,
    data DESC
  ) v
GROUP BY
  categoria,
  cont ASC
HAVING cont <= 3

Mas certamente alguém terá uma solução.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não exibiu 3 notícias de cada categoria.. Exibiu como se tivesse com GROUP BY (apenas 1 notícia por cada categoria) :s

 

 

pelo visto vou ter que fazer na gambiarra mesmo..

<?php
$gr = mysql_query("SELECT categoria FROM conteudo GROUP BY categoria ORDER BY id DESC");
while($cat = mysql_fetch_array($gr)){
      $noticias = mysql_query("SELECT * FROM conteudo WHERE categoria = '".$cat['categoria']."' ORDER BY id DESC LIMIT 3");
      while($noticia = mysql_fetch_array($noticias)){
            echo $noticia['titulo'];
      }
}
?>

vlw cara

Compartilhar este post


Link para o post
Compartilhar em outros sites
Faz a contagem de quantas noticias existem na tabela para cada categoria.




SELECT categoria, COUNT( id ) qtd_noticias
FROM conteudo
GROUP BY categoria
ORDER BY categoria ASC



Para a SQL que eu fiz, deve haver no mínimo 3 id por categoria.

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.