lska: PHP/MYSQL Sortiert ausgeben Problem

Ich habe folgenden Code

if (isset($_GET["sort"])) {  
switch ($_GET["sort"]){  
case "1":  
$sort = "topics.datestamp";  
case "2":  
$sort = "topics.rating";  
}}else{$sort = "topics.datestamp";}  
  
$con=mysqli_connect("localhost","root","","data");  
$abfrage = "SELECT * FROM topics ORDER BY $sort LIMIT 0, 10";  
$res = mysqli_query($con,$abfrage);  
while($row = mysqli_fetch_array($res))  
  {  
  echo $row["headline"];  
  echo "<br>";  
  echo $row["description"];  
  echo "<br>";  
  echo "<br>";  
  echo "<br>";  
      }

Wenn man die Seite mit "?sort`=1" aufruft, soll aus der datenbank  die neuesten 10 einträge erscheinen, bei "?sort=2" die bekanntesten 10 (sortiert nach der Spalte rating [int]). Allerdings funktioniert das nicht. Warum??

  1. Schau dir das SQL an und probier aus was dabei als Antwort kommt. Dann weißt du was die Datenbank da wirklich tut.
    Bist du sicher dass 1 und 2 wirklich die gewünschten Spalten sind? Ich würd die Spalten lieber einzeln aufzählen.

  2. Meine Herren!

    Ich habe folgenden Code

    switch ($_GET["sort"]){
    case "1":
    $sort = "topics.datestamp";
    case "2":
    $sort = "topics.rating";
    }

      
    
    > Allerdings funktioniert das nicht. Warum??  
      
    Eine bessere Fehlerbeschreibung hätte dich vermutlich schon selbst auf die Ursache stoßen können. Ich meine eine Fehlerbeschreibung à la "Mein Programm verhält sich scheinbar so, als ob immer der zweite Fall der switch-Kontrollstruktur eintritt."  
      
    `break;`{:.language-php}  
    
    -- 
    “All right, then, I'll go to hell.” – Huck Finn
    
    1. Hi,

      Ich meine eine Fehlerbeschreibung à la "Mein Programm verhält sich scheinbar so, als ob immer der zweite Fall der switch-Kontrollstruktur eintritt."

      break;

      ist m.E. ein Designfehler vieler Programmiersprachen.

      In fast allen Fällen, wenn Code hinter dem Case vorhanden ist,  soll der Code des/der nächsten case(s) nicht ausgeführt werden.
      Es wäre also wesentlich weniger fehleranfällig gewesen, wenn das Break implizit gesetzt würde, es sei denn, man markiert per fallthrough die Tatsache, daß wirklich der nächste case ausgeführt werden soll.

      Ich würde statt

        
      switch(x)  
      {  
      case 1:  
      case 2:  
          echo "1 oder 2";  
          break;  
      case 3:  
          echo "3";  
          break;  
      case 4:  
          echo "4";  
      case 5:  
          echo "4 oder 5";  
          break;  
      }  
      
      

      sowas vorziehen:

        
      switch(x)  
      {  
      case 1, 2: //für mehrere Fälle der gleiche Code ==> die Fälle kommasepariert auflisten  
          echo "1 oder 2";  
      case 3:  
          echo "3";  
      case 4:  
          echo "4";  
          fallthrough; //hier der Sonderfall, Code des nächsten Case auch ausführen  
      case 5:  
          echo "4 oder 5";  
      }  
      
      

      Aber leider ist diese m.E. wesentlich weniger fehleranfällige Variante in keiner mir bekannten Sprache (und schon gar nicht in den von mir benutzten Sprachen) implementiert.
      Statt "fallthrough" könnte auch "next" oder ähnliches verwendet werden ...

      cu,
      Andreas

      --
      Warum nennt sich Andreas hier MudGuard?
      O o ostern ...
      Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
      1. Meine Herren!

        break;

        ist m.E. ein Designfehler vieler Programmiersprachen.

        Mit der Meinung stehst du nicht alleine da. Code-Quality-Tools wie JSLint (für JavaScript) können so konfiguriert werden, dass sie switch-Kontrollstrukturen nicht akzeptieren. Häufig ist es auch Konvention, dass Fälle, die ineinander fallen mit einem Kommentar //falls into gekennzeichnet werden und sonst davon ausgegangen wird, dass es ein Fehler ist.

        --
        “All right, then, I'll go to hell.” – Huck Finn