Ir para conteúdo

POWERED BY:

Arquivado

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

Paulo Freitas Nobrega

[Resolvido] Resgatando dados por GROUP BY

Recommended Posts

E ai pessoal estou precisando de uma ajudinha!

 

Tenho uma tabela com o nome events que possuí os campos (id,category,title,resume,text,date,hour,hit) e nela são cadastrados alguns eventos. Estou tentando fazer a seguinte consulta:

 

Agrupar os eventos cadastrados por mês e ano, exemplo: (janeiro de 2010, fevereiro de 2010, etc...). Para realizar tal consulta fiz dois SELECT que agrupam perfeitamente os dados:

 

SELECT 1)

$sql = "SELECT title as titulo, EXTRACT(MONTH FROM date) as MES, EXTRACT(YEAR FROM date) as ANO FROM $tab GROUP BY MES,ANO";
$result = mysql_query($sql) or die (mysql_error());

SELECT 2)

$sql = "SELECT * FROM $tab GROUP BY MONTH(date),YEAR(date)";
$result = mysql_query($sql) or die (mysql_error());

com a linha de código mysql_num_rows($result); foi possível verificar que o agrupamento está sendo executando corretamente. A minha dificuldade esta na hora de resgatar os dados. Gostaria de exibir o valor do campo (id) de cada evento agrupados de acordo com a consulta (mes/ano). Para isso tentei:

 

TENTATIVA 1)

$myrow = mysql_result($result,"titulo");
print $myrow;

Isso retorna apenas o título de um dos eventos agrupados

TENTATIVA 2)

while($myrow = mysql_fetch_array($result)) {
echo $myrow["title"];
}

Isso não retorna nada

Alguém saberia como resgatar esses dados?

Compartilhar este post


Link para o post
Compartilhar em outros sites

A melhor opção não é agrupar, é ordenar e exibir o título só quando mudar. Tente trocar o group by por order by. Aí, para exibir ou não o nome do mês você utiliza o PHP mesmo.

Seria algo mais ou menos assim:

 

$mes = '';
$ano = '';
while($myrow = mysql_fetch_assoc($result)) 
{
   if($ano != $myrow['ano']) 
   {
      echo 'Ano é ',$myrow['ano'],'<br/>';
      $ano = $myrow['ano'];
   }

   if($mes != $myrow['mes']) 
   {
      echo 'Mês é ',$myrow['mes'],'<br/>';
      $mes = $myrow['mes'];
   }
   echo 'Título é ',$myrow['title'],'<br/>';
}

Veja que só vai funcionar se você trocar o GROUP BY por ORDER BY. Se não for isto, eu entendi errado a lógica do que você quer fazer.

 

Carlos Eduardo

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.