webForumDet fria alternativet

Sorteringsproblem

6 svar · 458 visningar · startad av JaktJanne

JaktJanneMedlem sedan feb. 20001 507 inlägg
#1
<?php      
//**************************************
   // Hämtar de som anmält sig till träning
   //**************************************
   $dagens_datum  = date ("Y-m-d", mktime(0, 0, 0, date("m"), date("d"), date("Y")));
   $query       = "Select * from anm_traning where tr_datum >='$dagens_datum' group by tr_datum order by t_grupp, narvaro desc";
   
   $resultat    = mysql_query($query,$databas_link);
   $num_rows1 = mysql_num_rows($resultat);
   
   if ($num_rows1 < 1){
         
         echo "Ännu har inga anmält sig<br>";
         return;
         }
   
   while($rad=mysql_fetch_array($resultat))
   {
      $TR_datum   = $rad['tr_datum'];
      $narvaro    = $rad['narvaro'];
      $par_ID      = $rad['par_id'];
      
 
      
      // -----------------
      echo "<p>&nbsp;</p>";
      echo "<hr> ";
      echo "<h5>Anmälda inför träningen den $TR_datum</h5>";
                  
      // Hämtar ut parets id och datum de anmält sig till
       $query3      = "Select distinct * from anm_traning WHERE tr_datum= '$TR_datum'";
       $resultat3    = mysql_query($query3,$databas_link);
       $rows       = mysql_num_rows($resultat3);
       
       
      if($rows > 0)
      {       
      ?>
<table width="80%" cellpadding="1">
  <?php
      //Skriver ut varje rad i tabellen   
         while( $rad3=mysql_fetch_array($resultat3) )
         {
            $par_id    = $rad3['par_id'];
            $Auto_ID   = $rad3['auto_id'];
            $datum      = $rad3['tr_datum'];
            $t_grupp   = $rad3['t_grupp'];
            
            //Skriver rätt text för närvaro
              switch ($rad3['narvaro']) {
                  case '0':
                    $a_narvaro = "Kommer ej";
                  break;
                  case '1':
                     $a_narvaro = "Kommer";
                  break;
                  }
               
               
            //Skriver rätt text för grupp
 
              switch ($rad3['t_grupp']) {
                   case '0':
                    $t_grupp = "Ungdom";
                  break;
                  case '1':
                     $t_grupp = "Vuxen 1";
                  break;
                  case '2':
                     $t_grupp = "Vuxen 2";
                  break;
               case '3':
                     $t_grupp = "Rullis";
                  break;
                  }
                                             
            // Hämtar ut info om paret
            $query_      = "Select * from tavlings_par WHERE tpar_id = '$par_id'";
            $resultat_    = mysql_query($query_,$databas_link);
            $rad_      = mysql_fetch_array($resultat_);
            
            $k_namn     = $rad_['k_namn'];
            $t_namn    = $rad_['t_namn'];
            ?>
  <tr>
    <td width="10">&nbsp;</td>
    <td><?php echo $k_namn ?>&nbsp;-&nbsp;<?php echo $t_namn ?> </td>
    <td width="100"><?php echo $a_narvaro ?></td>
    <td width="88"><?php echo $t_grupp ?></td>
  </tr>
  <?php
      }
   }
   ?>
</table>
<p class="style1">
  <?php         
 
   }

Har ovanstående kod men den vill inte sortera som jag vill. Rättare sagt så blir det ingen sortering alls utan det blir efter det unika numret i db:n.
Är det nån som ser nåt fel, jag har kört fast.

Jag vill sortera på t_grupp, narvaro

LarsGMedlem sedan dec. 200012 464 inlägg
#2

Varför har du group by med i frågan?

JaktJanneMedlem sedan feb. 20001 507 inlägg
#3

Jag har en anmälningssida där det finns flera datum och jag vill visa varje datum grupperad.
Jag är en lite noobie i php, hur skulle jag annars göra då tycker du?

dump.gif
JaktJanneMedlem sedan feb. 20001 507 inlägg
#4

Du fick mig att tänka till LarsG. Ändrade följande rader:

   $query = "Select * from anm_traning where tr_datum >='$dagens_datum' group by tr_datum order by t_grupp, narvaro desc";

Till

   $query = "Select * from anm_traning where tr_datum >='$dagens_datum' group by tr_datum";

Och sorterade längre ner

$query3 = "Select * from anm_traning WHERE tr_datum= '$TR_datum'";

Till

$query3 = "Select * from anm_traning WHERE tr_datum= '$TR_datum' order by t_grupp, narvaro desc";

Till saken hör att det har fungerat innan och sen var jag och kopierade lite kod men lyckades tydligen att ställa till nåt.

LarsGMedlem sedan dec. 200012 464 inlägg
#5

Om du vill gruppera per datum i presentationen så skall du inte använda group by.
I stället så får du ta med tr_datum först i din order by och i ditt php-skript hålla reda på när du får ett nytt datumvärde.

lite schematiskt

$p_datum = "";
$query = "Select * from anm_traning WHERE tr_datum= '$TR_datum' order by tr_datum,t_grupp, narvaro desc"; 
$cursor = mysql_query($query) or die(mysql_error());
while ($row = mysql_fetch_...($cursor)) {
   if  ( $p_datum != $row["tr_datum"]) {
       $p_datum = $row["tr_datum"];
// utskrift av datum
   }
// utskrift av rester
}
JaktJanneMedlem sedan feb. 20001 507 inlägg
#6

Ser intressant ut, skall testa detta.
Då borde jag väl kunna ta bort $QUERY3... eller?

JaktJanneMedlem sedan feb. 20001 507 inlägg
#7

Bra förslag LarsG, blev lite överskådligare kod.

Tror att den gick snabbare att ladda också.

134 ms totalt · 3 externa anrop · v20260731065814-full.0e50b1ef
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)