Jump to content
Fórum Script Brasil
  • 0

Agrupar dados vindos do mysql


saulo69

Question

Bom dia Pessoal,

Antes de postar minha duvida pesquisei muito e não achei nenhum resultado satisfatório...

Vamos lá, no meu banco tenho a seguinte tabela:

codigo | data_publicacao | arquivo

O que eu quero é fazer um select e agrupar por mês, exemplo:

codigo | data_publicacao | arquivo

1----------2012-03-01------001.pdf

2----------2012-03-02------002.pdf

3----------2012-03-03------003.pdf

4----------2012-04-04------004.pdf

5----------2012-05-05------005.pdf

6----------2012-05-06------006.pdf

7----------2012-05-07------007.pdf

8----------2012-05-08------008.pdf

Ficando dessa forma:

--------------001.pdf

----março---002.pdf

--------------003.pdf

-----Abril----004.pdf

--------------005.pdf

------Maio----006.pdf

--------------007.pdf

--------------008.pdf

A questão toda é que eu não estou sabendo a logica de colocar apenas uma vez o nome do mês, como está no loop sempre fica o mês ao lado do respectivo arquivo, exemplo:

----março----001.pdf

----março----002.pdf

----março----003.pdf

----Abril----004.pdf

----Maio----005.pdf

----Maio----006.pdf

----Maio----007.pdf

----Maio----008.pdf

Segue meu código:

if(empty($_GET['ano'])){

$SelectAtas = mysql_query("SELECT * FROM atas WHERE YEAR(data_publicacao) = YEAR(DATE(NOW())) ORDER BY data_publicacao DESC")or die("Erro na seleção".mysql_error());

while($RowAta = mysql_fetch_assoc($SelectAtas)){

$AtaNome = $RowAta['arquivo'];

$AtaData = $RowAta['data_publicacao'];

desconverte_data($AtaData);

$AtaDataAgrupada = substr($AtaData, 3, 7);

$AtaMes = substr($AtaData, 3, 2);

echo"Ata da Reunião - $AtaData<br>";

}

} else{

$AtaAno = $_GET['ano'];

$SelectAtas = mysql_query("SELECT * FROM atas WHERE YEAR(data_publicacao) = '$AtaAno'")or die("Erro na seleção".mysql_error());

while($RowAta = mysql_fetch_array($SelectAtas)){

$AtaNome = $RowAta['arquivo'];

echo"$AtaNome<br>";

}

Link to comment
Share on other sites

8 answers to this question

Recommended Posts

  • 0

Saulo posta o codigo de HTML onde você ta dando print nesses arquivos...

por que se eu entendi bem...

ao invez de ficar

|-------------------------------|

|----------------|---01.pdf----|

|----------------|---02.pdf----|

|---MARÇO----|---03.pdf----|

|----------------|---04.pdf----|

|-------------------------------|

Fica

|-------------------------------|

|---MARÇO----|---05.pdf----|

|---MARÇO----|---06.pdf----|

|---MARÇO----|---08.pdf----|

|-------------------------------|

Sendo assim

quando você der echo dentro do WHILE, tire a função de mostrar o nome... deixe ela fora do WHILE assim não repete o nome do mês .. somente a do arquivo.

Link to comment
Share on other sites

  • 0
$ano_aux = "";
if(empty($_GET['ano'])){
$SelectAtas = mysql_query("SELECT * FROM atas WHERE YEAR(data_publicacao) = YEAR(DATE(NOW())) ORDER BY data_publicacao DESC")or die("Erro na seleção".mysql_error());
while($RowAta = mysql_fetch_assoc($SelectAtas)){
    $AtaNome = $RowAta['arquivo'];
    $AtaData = $RowAta['data_publicacao'];
    desconverte_data($AtaData);
    $AtaDataAgrupada = substr($AtaData, 3, 7);
    $AtaMes = substr($AtaData, 3, 2);
echo"Ata da Reunião - $AtaData<br>";

    } 

} else{
    $AtaAno = $_GET['ano'];
$SelectAtas = mysql_query("SELECT * FROM atas WHERE YEAR(data_publicacao) = '$AtaAno'")or die("Erro na seleção".mysql_error());
while($RowAta = mysql_fetch_array($SelectAtas)){
    $AtaNome = $RowAta['arquivo'];
    
    echo"$AtaNome<br>";
 }
    }

Link to comment
Share on other sites

  • 0

Não tem mais nada?

por que se for so isso não estou vendo problema.

ele ta imprimindo a Data e o Arquivo.

a menos que o nome do mês que tu se referiu seja a Data em especifico.

dai vai muda o caso agente vai ter que usar condição...

faz o seguinte poem o sql do seu banco vou instala seu script aqui com banco e testar.

Link to comment
Share on other sites

  • 0

Olha, utiliza condição para cada mês .. da um explode na data pega somente o digito do mês

então faz a condição

$SelectAtas = mysql_query("SELECT data_publicacao FROM atas WHERE YEAR(data_publicacao) = YEAR(DATE(NOW())) ORDER BY data_publicacao DESC")or die("Erro na seleção".mysql_error());

$RowAta = mysql_fetch_assoc($SelectAtas);
$data = explode $RowAta['data_publicacao'] A IDEIA PRINCIPAL
If ($data == 5)    // se a data depois do explode foi = a 5 ou seja maio )

{ 

$SelectAtas = mysql_query("SELECT * FROM atas WHERE YEAR(data_publicacao) = YEAR(DATE(NOW())) ORDER BY data_publicacao DESC")or die("Erro na seleção".mysql_error());

$RowAta = mysql_fetch_assoc($SelectAtas);

$AtaData = $RowAta['data_publicacao'];
    desconverte_data($AtaData);
    $AtaDataAgrupada = substr($AtaData, 3, 7);
    $AtaMes = substr($AtaData, 3, 2);
echo"Ata da Reunião - $AtaData<br>";


while($RowAta = mysql_fetch_assoc($SelectAtas)){
    $AtaNome = $RowAta['arquivo'];
    
  }
       }

bem para ver se tu entendeu...

eu filtrei o echo

se o Mes foi 5 então vamos fazer um select semente do mês 5

então vai ser impresso a data ou seja o mês e depois dentro do while os arquivos.

Link to comment
Share on other sites

  • 0

Saulo,

Fiz um exemplo rápido aki. Olhse se te ajuda!

$arrDados = array(
        array('MES' => 'Março','ARQUIVO' => '001.pdf'),
        array('MES' => 'Março','ARQUIVO' => '002.pdf'),
        array('MES' => 'Março','ARQUIVO' => '003.pdf'),
        array('MES' => 'Março','ARQUIVO' => '004.pdf'),
        array('MES' => 'Abril','ARQUIVO' => '005.pdf'),
        array('MES' => 'Abril','ARQUIVO' => '006.pdf'),
        array('MES' => 'Abril','ARQUIVO' => '007.pdf'),
        array('MES' => 'Maio','ARQUIVO' => '008.pdf'),
        array('MES' => 'Maio','ARQUIVO' => '009.pdf')
    );
    
    $arrAgrupado = array();
    
    
    foreach($arrDados as $arrLista){
        $arrAgrupado[$arrLista['MES']]['DADOS'][] = $arrLista;
    }

    
    echo '<table border="1">';
    foreach($arrAgrupado as $key => $value){
        echo '<tr><td rowspan="'. count($value['DADOS']) .'">' . $key . '</td>';
        foreach($value['DADOS'] as $arrArquivos) {
            echo '<td>' . $arrArquivos['ARQUIVO'] . '</td></tr>';
        }
    }
    echo '</table>';

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...