php – Build news by grouping results by user class

Question:

I'm developing a news system where a certain user class will be able to post one or more news for everyone to see it works perfect, but for a better view I would like these messages to be grouped by the class of the user who posted it. I'll give you an example as it is below: here I do a normal select:

SELECT a.id_salapostagem, a.titulo, a.mensagem, a.data_lancamento,  
b.descricao
FROM salapostagem a
INNER JOIN usuariotipo b on a.usuariotipo_id = b.id_usuariotipo 
WHERE a.cursograde_id = 0;

here is the answer i have:

id_salapostagem  |        titulo            |                                   mensagem                                             |     descricao
      6          |   teste de mensagem 01   |   teste de mensagem 01 esta mensagem vai aparecer para todo mundo 2015-12-09 16:15:21  |     Webmaster
      7          |   teste de mensagem 02   |   teste de mensagem 02 esta mensagem tbm vai aparecer para todos  2015-12-09 16:19:13  |     Webmaster
      12         |   teste de mensagem 03   |   teste de mensagem 03 esta mensagem vai aparecer para todo mundo 2015-12-09 16:15:21  |     administrador

This is the loop I make for news to appear

<?php
mysql_data_seek($sqlNot, '0');
while($not = mysql_fetch_array($sqlNot) ){
    if($_SESSION["usuariotipoid"] != 4 || $_SESSION["usuariotipoid"] != 5 || $_SESSION["usuariotipoid"] != 9){
    $Botao = "Seção: ".$not["descricao"]."";

}
    ?>
        <div class="nome" style="margin-top: 10px">ADMINISTRAÇÃO<div style="float: right"><?php echo $Botao; ?></div></div>
        <div class="disciplina ocultar" style="margin-top: 10px"><?php echo $not["titulo"]; ?> <div style="float: right"><?php echo $not["data_lancamento"]; ?></div></div>

        <div class="content mostrar" style="min-height: auto;">
            <?php echo $not["mensagem"]; ?>


        </div>  
        <?php
}

The news appears in the sequence in which it was posted in this way:

| ADMINISTRAÇÃO                                Seção: Webmaster   |
| teste de mensagem 01                       2015-12-09 16:15:21  |
| teste de mensagem 01 esta mensagem vai aparecer para todo mundo |

| ADMINISTRAÇÃO                                Seção: Webmaster   |
| teste de mensagem 02                       2015-12-09 16:19:13  |
| teste de mensagem 02 esta mensagem vai aparecer para todo mundo |

| ADMINISTRAÇÃO                              Seção: administrador |
| teste de mensagem 03                       2015-12-09 16:15:21  |
| teste de mensagem 03 esta mensagem vai aparecer para todo mundo |

And I would like them to appear like this:

| ADMINISTRAÇÃO                                Seção: Webmaster   |
| teste de mensagem 01                       2015-12-09 16:15:21  |
| teste de mensagem 01 esta mensagem vai aparecer para todo mundo |
|                                                                 |
| teste de mensagem 02                       2015-12-09 16:19:13  |
| teste de mensagem 02 esta mensagem vai aparecer para todo mundo |



| ADMINISTRAÇÃO                              Seção: administrador |
| teste de mensagem 03                       2015-12-09 16:15:21  |
| teste de mensagem 03 esta mensagem vai aparecer para todo mundo |

Thank you in advance for any help, as it is difficult to resolve this.

Answer:

One of the things is to add the field you want to order in the ORDER BY:

SELECT   a.id_salapostagem, a.titulo, a.mensagem, a.data_lancamento, b.descricao
FROM     salapostagem a
INNER    JOIN usuariotipo b on a.usuariotipo_id = b.id_usuariotipo 
WHERE    a.cursograde_id = 0
ORDER BY descricao

The other is to create a situation to show the title once. For example something like this:

$titulo= '';

...

while($not = mysql_fetch_array($sqlNot) ){
   if( $titulo!= $not['descricao'] ) {
      echo 'ADMINISTRACAO            Secao: ' . $not['descricao'];
      $titulo=$not['descricao'];
   }

This is just an example, I would have to adjust it to the correct field.

Scroll to Top