Ankündigung

Einklappen
Keine Ankündigung bisher.

ORDER BY und WHERE -"Kollision"

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • ORDER BY und WHERE -"Kollision"

    PHP-Code:
    if(isset($_POST["action"]))
    {
        
    $seiten $_POST["seiten"];
        
    $monate $_POST["monate"];

        
    $query "SELECT s.*,
     @rownum := @rownum + 1 AS num,


     IF((((
    $seiten * $monate - Starter1) / KRW1) * KPreis1) IS NULL OR ((($seiten * $monate - Starter1) / KRW1) * KPreis1) < 0, 0, ((($seiten * $monate - Starter1) / KRW1) * KPreis1)) +
     IF((((
    $seiten * $monate - Starter2) / KRW2) * KPreis2) IS NULL OR ((($seiten * $monate - Starter2) / KRW2) * KPreis2) < 0, 0, ((($seiten * $monate - Starter2) / KRW2) * KPreis2)) +
     IF((((
    $seiten * $monate - Starter3) / KRW3) * KPreis3) IS NULL OR ((($seiten * $monate - Starter3) / KRW3) * KPreis3) < 0, 0, ((($seiten * $monate - Starter3) / KRW3) * KPreis3)) +
     IF((((
    $seiten * $monate - Starter4) / KRW4) * KPreis4) IS NULL OR ((($seiten * $monate - Starter4) / KRW3) * KPreis4) < 0, 0, ((($seiten * $monate - Starter4) / KRW4) * KPreis4)) +
     IF((((
    $seiten * $monate - Starter5) / KRW5) * KPreis5) IS NULL OR ((($seiten * $monate - Starter5) / KRW5) * KPreis5) < 0, 0, ((($seiten * $monate - Starter5) / KRW5) * KPreis5)) +
     IF((((
    $seiten * $monate - Starter6) / KRW6) * KPreis6) IS NULL OR ((($seiten * $monate - Starter6) / KRW6) * KPreis6) < 0, 0, ((($seiten * $monate - Starter6) / KRW6) * KPreis6)) +
     IF((((
    $seiten * $monate - Starter7) / KRW7) * KPreis7) IS NULL OR ((($seiten * $monate - Starter7) / KRW7) * KPreis7) < 0, 0, ((($seiten * $monate - Starter7) / KRW7) * KPreis7)) +
     IF((((
    $seiten * $monate - Starter8) / KRW8) * KPreis8) IS NULL OR ((($seiten * $monate - Starter8) / KRW8) * KPreis8) < 0, 0, ((($seiten * $monate - Starter8) / KRW8) * KPreis8)) +
     IF((((
    $seiten * $monate - Starter9) / KRW9) * KPreis9) IS NULL OR ((($seiten * $monate - Starter9) / KRW9) * KPreis9) < 0, 0, ((($seiten * $monate - Starter9) / KRW9) * KPreis9)) +
     IF((((
    $seiten * $monate - Starter10) / KRW10) * KPreis10) IS NULL OR ((($seiten * $monate - Starter10) / KRW10) * KPreis10) < 0, 0, ((($seiten * $monate - Starter10) / KRW10) * KPreis10)) +
     IF((((
    $seiten * $monate - Starter11) / KRW11) * KPreis11) IS NULL OR ((($seiten * $monate - Starter11) / KRW11) * KPreis11) < 0, 0, ((($seiten * $monate - Starter11) / KRW11) * KPreis11)) +
     IF((((
    $seiten * $monate - Starter12) / KRW12) * KPreis12) IS NULL OR ((($seiten * $monate - Starter12) / KRW12) * KPreis12) < 0, 0, ((($seiten * $monate - Starter12) / KRW12) * KPreis12)) +
     vknetto
     AS kgesamt

     FROM Drucker s, (SELECT @rownum := 0) r WHERE vkbrutto > 0
    "

    Meine Frage wäre, wie quetsche ich nun
    PHP-Code:
    ORDER BY kgesamt 
    in die Hauptabfrage, damit sie mit den Filtern unten nicht kollidiert. Also vom Prinzip müsste der Quelltext der Filter nach WHERE vkbrutto > 0 stehen. Ich möchte das ganze immer nach kgesamt sortiert haben, unabhängig ob ein Filter aktiv ist oder nicht, deshalb würde ein ORDER BY nach den einzelnen filtern zwar funktionieren, das ganze soll aber schon ohne eine Filterfunktion sortiert werden. Ich weiß nicht, ob ich mich jetzt verständlich genug ausgedrückt habe.

    PHP-Code:


        
    if(isset($_POST["minimum_price"], $_POST["maximum_price"]) && !empty($_POST["minimum_price"]) && !empty($_POST["maximum_price"]))
        {
            
    $query .= "
             AND vkbrutto BETWEEN '"
    .$_POST["minimum_price"]."' AND '".$_POST["maximum_price"]."' 
            "
    ;
        }
        if(isset(
    $_POST["hersteller"]))
        {
            
    $hersteller_filter implode("','"$_POST["hersteller"]);
            
    $query .= "
          AND hersteller IN('"
    .$hersteller_filter."')
            "
    ;
        }
        if(isset(
    $_POST["drucken"]))
        {
            
    $drucken_filter implode("','"$_POST["drucken"]);
            
    $query .= "
             AND drucken IN('"
    .$drucken_filter."')
            "
    ;
        }
        if(isset(
    $_POST["kopieren"]))
        {
            
    $kopieren_filter implode("','"$_POST["kopieren"]);
            
    $query .= "
             AND kopieren IN('"
    .$kopieren_filter."')
            "
    ;
        } 

  • #2
    Nummerierte Spalten (in den Ausmaßen) sind ein Zeichen für fehlerhaftes (schlechtes) Datenbankdesign.
    Erzähl uns doch mal was du darstellen möchtest, dann können wir dir auch besser helfen.

    Kommentar


    • #3
      Das ORDER BY packst du einfach ganz am Ende noch mit in $query unabhängig von den Filtern.
      Du solltest aber unbedingt PreparedStatements verwenden und nicht POST-Daten ungeprüft in die Abfrage übernehmen.
      sorry, shift-taste kaputt

      Kommentar

      Lädt...
      X