Beste forumleden,

Ik wil op basis van een sort order sorteren maar helaas lukt dit niet.
Het is voor een menukaart waar je categorieen kan maken als voorgerechten, hoofdgerechten, nagerechten.

Bij het aanmaken van de categorieen kan je een sort order meegegeven als integer. Op basis van de sort order wil ik de menukaart weergeven.

Dit is de code:

<?php
         
        $q = 'SELECT * FROM menu_item_to_bedrijf WHERE klant_id = "'.verkrijgIngelogdeKlantId().'" ORDER BY categorie_id, sort_order ASC ';
        $result = $database->query($q);
        
        if (mysqli_num_rows($result) == 0)
        {
        
        echo '<h3 class="text-center">U heeft nog geen menukaart ingevuld.</h3>';
        
        }
        
        $category = null;

        while ($rows = mysqli_fetch_assoc($result))
        {
            
           
            
            if ($category != $rows['categorie_id'])
            {
              echo ' <table class="table menukaart">
                            
                            <tbody>
                           ';
              $category = $rows['categorie_id'];
             
              echo '<h3 style="background-color: #e84c3d; padding:5px; color:white;">'.verkrijgCategorieNaamById($rows['categorie_id']).'</h3>';
               

            }
 
            //echo $rows['naam'].' - '.$rows['prijs'].' - '.$rows['sort_order'].'<br/>';
            
            echo ' <tr><td>'.$rows['naam'].'</td><td>&euro; '.$rows['prijs'].'</td></tr>';
              
             
        }
        
      echo ' </tbody>
                        </table>';
          
         
                              
     ?>
Ivo P op 19/11/2015 15:27:13

zie ik nu goed aan de uitlijning dat je de prijs als een varchar() hebt opgeslagen?

bedragen sla je het beste op als een DECIMAL()
bijvoorbeeld DECIMAL(8,2)

De bedragen komen dan met een . in de tabel te staan.
bijvoorbeeld 7.95

Maar daarmee is een bedrag ook echt een getal
Als je op varchars sorteert, dan is "30,99" kleiner dan "7.95"

Bovendien zou je de getallen als decimal ook kunnen gebruiken in een berekening.


Bedankt voor de tip, ik doe dat enkel in dit geval zo omdat de gebruiker vaak met een comma de prijs invoert en om dan een str_replace te moeten doen om een . een , te maken is nu niet echt van belang omdat ik verder niets met deze prijs doe van het menu, enkel weergeven ervan.

Als iemand nog een oplossing weet voor mijn topic vraag heel graag.
Regel 32 van je code:
<?php $category = $rows['m.categorie_id']; ?>

In de query is m. een alias voor tabel naam, in het resultaat wordt alleen de kolomnaam meegegeven.
Ook ontbreekt de kolom categorie_id in de select van de query.

Vanwege het gebruik van alleen de kolomnaam moet je, als kolommen uit verschillende tabellen dezelfde naam hebben, één van die kolom anders benoemen anders wordt de waarde van de laatste kolom weergegeven.
"niet echt van belang omdat ik verder niets met deze prijs doe van het menu, enkel weergeven ervan."

onthoud dat even voor het moment dat je toch wat daarmee gaat doen, en er een klacht komt dat 2 soepjes van 7,95 samen opgeteld maar 14 euro kosten.
Ger van Steenderen op 20/11/2015 13:38:41

Regel 32 van je code:
<?php $category = $rows['m.categorie_id']; ?>

In de query is m. een alias voor tabel naam, in het resultaat wordt alleen de kolomnaam meegegeven.
Ook ontbreekt de kolom categorie_id in de select van de query.

Vanwege het gebruik van alleen de kolomnaam moet je, als kolommen uit verschillende tabellen dezelfde naam hebben, één van die kolom anders benoemen anders wordt de waarde van de laatste kolom weergegeven.



Het is gelukt hoor! Hartelijk dank voor de query en de uitleg, ook andere forum leden hartelijk dank voor jullie tijd en input.

Na het verschillend maken van de kolommen kon ik via de join functie correct sorteren.
>> Na het verschillend maken van de kolommen kon ik via de join functie correct sorteren.

Je had dat ook in de query zelf kunnen doen, je hoeft daarvoor niet de tabel aan te passen:

SELECT m.naam, c.naam AS categorie_naam ......

Sorry dat ik daarin niet helemaal duidelijk ben geweest.

Reageren