verzwickter Vergleich von 3 Werten

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

  • verzwickter Vergleich von 3 Werten

    Hallo, ich joine 3 Tabellen und lese nun ua. 3 Werte aus, die ich vergleichen will.

    Preis A = Spalte 1 = immer Preis enthalten
    Preis B = Splate 2 = leer oder mehr enthalten
    Preis C = Spalte 3 = leer oder mehr enthalten

    Jetzt will ich Preis A mit den anderen beiden Preisen vergleichen.

    Dabei soll Preis A rot markiert werden, wenn:
    - Preis B oder C nicht leer ist und dann mindestens einer von Preis B oder C kleiner ist als Preis A

    Hier mal eine anschauliche Grafik so wie es aussehen soll:


    Versucht hab ich es so, warum auch immer:
    Dabei ist row[2] = Preis A
    row[9] = Preis B
    row[14] = Preis C

    PHP-Code:
    if(empty($row[9]) and empty($row[14]))
    {
        echo 
    $row[2];
    }
    else
    {
        if((!empty(
    $row[9]) >= $row[2]) and (!empty($row[14]) <= $row[2]))
        {
            echo 
    "<span style='color:red'>".$row[2]."</span>";
        }
        elseif((!empty(
    $row[9]) <= $row[2]) and (!empty($row[14]) >= $row[2]))
        {
            echo 
    "<span style='color:red'>".$row[2]."</span>";
        }
        else
        {
            echo 
    $row[2];
        }

    Nur funktioniert es natürlich nicht... jetzt wird alles rot angezeigt ausser die, wo in beiden Spalten nichts drin steht. Wo sind da meine Fehler?

  • #2
    ((!empty($row[9]) >= $row[2]) ist ja auch unsinn. was hat empty für einen rückgabewert? warum vergleichst du diesen mit einem zahlenwert? das sind zwei paar schuhe und sollten ensprechend separat abgefragt werden.

    Kommentar


    • #3
      @penizillin

      Also entweder steht in der Spalte was drin oder die Spalte ist "leer". Deswegen prüfe ich vorher noch mit "! empty" ob was drin steht oder nicht. Und ich will ja nur "nicht-leere" Werte überprüfen und vergleichen. Deswegen hab ich geprüft, ob der nicht-leere Wert von row[9] größer-gleich als row[2] ist. Ist das denn verkehrt? Ok, gehen tut es am Ende so oder so nicht...

      Kommentar


      • #4
        richtig. also zwei ansätze.... warum ist der defaultwert der db nicht "0"? somit kannst den kram mit empty vergessen und rein mathematisch vergleichen. oder du setzt innerhalb deine abfrag empty=0... so ungefähr:

        PHP-Code:
        i
        if(empty($row[9]) and empty($row[14]))  //Preis B oder C nicht leer
        {
            echo 
        $row[2];
        }
        else
        {
            if (empty(
        $row[9])) $row[9]=0;
            if (empty(
        $row[14])) $row[14]=0;
            if(
        $row[9] <= $row[2] or $row[14] <= $row[2])
            {
                echo 
        "<span style='color:red'>".$row[2]."</span>";
            }
            else
            {
                echo 
        $row[2];
            }

        **********
        arkos
        **********

        Kommentar


        • #5
          du meinst sicherlich:
          PHP-Code:
          if(!empty($row[9]) {
          if(
          $row[9] >= $row[2]) {
          ...}

          OffTopic:
          Mist! Zu langsam.
          it's not a bug,
          it's a feature!

          Kommentar


          • #6
            Das Problem ist wohl, dass ich ein LEFT JOIN auf 3 Tabellen mach und ich dann eben auch leere Werte zu meiner WHERE-Klausel zurückbekomme...

            Kommentar


            • #7
              ... ob der nicht-leere Wert von row[9] größer-gleich ...
              genau das hast du dir ausgedacht. was soll der "nicht-leere wert" von "" sein? und was ist der "leere wert" von "foo"? schau mal im manual, was empty() macht und baue deine abfrage schrittweise auf. erst prüfen, was leer ist. dann mit dem vergleichen, was nicht-leer ist.

              Kommentar

              Lädt...
              X