Ankündigung

Einklappen
Keine Ankündigung bisher.

Abfrage aus 2 Tabellen mit Berechnung, in zweiter Tabelle kein Datensatz

Einklappen

Neue Werbung 2019

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

  • Abfrage aus 2 Tabellen mit Berechnung, in zweiter Tabelle kein Datensatz

    Hallo, diese Abfrage funktioniert, wenn in der zweiten Tabelle ein Datensatz gefunden wurde:

    PHP-Code:
        public static function getData_neu($pProfilWahl$Sales_Code,  &$pResultRecord)
        {
            
    $db appDB::getInstance();        
            return 
    $db->select(
                
    'SELECT `No`, No2, Beschreibung, Rippen, Bestand, Discount, round((navlager.Preis * (( 100.0 - navdiscount.Discount) / 100.0)), 2) AS preis
                    FROM navlager, navdiscount
                    WHERE 
                    navdiscount.Sales_Code = ?
                    AND navdiscount.Code = navlager.Artikelrabattgruppe
                    AND Profil = ?
                    AND sichtbar = 2
                    ORDER BY No2'
    ,
                
    $pResultRecord, [
                    
    $db->createParam((string) $Sales_Code),
                    
    $db->createParam((int) $pProfilWahl),
                ],
                
    appDB::STMT_OPTION_PERSISTENT
            
    );
        } 
    Sobald aber in der Tabelle navdiscount kein Datensatz gefunden wurde, bringt die Abfrage kein Ergebnis. Stattdessen möchte ich aber, dass in der Berechnung navdiscount.Discount mit 0 eingesetzt wird.
    Ersetze ich 'FROM navlager, navdiscount' durch 'FROM navlager LEFT JOIN navdiscount' bekomme ich niemals ein Ergebnis.
    Wie muss ich meine Abfrage definieren?

    Danke - Günther

  • #2
    Ups, bei LEFT JOIN nicht WHERE, sondern ON.
    Dann kommt ein Ergebnis, aber auch nicht das was ich erwarte.
    Der Preis ist dann immer 0.

    Kommentar


    • #3
      So kommt wieder das Ergebnis wie zuvor:
      PHP-Code:
          public static function getData_neu($pProfilWahl$Sales_Code,  &$pResultRecord)
          {
              
      $db appDB::getInstance();        
              return 
      $db->select(
                  
      'SELECT `No`, No2, Beschreibung, Rippen, Bestand, Discount, round((navlager.Preis * (( 100.0 - navdiscount.Discount) / 100.0)), 2) AS preis
                      FROM navlager LEFT JOIN navdiscount
                      ON 
                      navdiscount.Code = navlager.Artikelrabattgruppe
                      WHERE
                      navdiscount.Sales_Code = ?
                      AND Profil = ?
                      AND sichtbar = 2
                      ORDER BY No2'
      ,
                  
      $pResultRecord, [
                      
      $db->createParam((string) $Sales_Code),
                      
      $db->createParam((int) $pProfilWahl),
                  ],
                  
      appDB::STMT_OPTION_PERSISTENT
              
      );
          } 

      Kommentar


      • #4
        Wie soll das denn funktionieren wenn du im WHERE auf navdiscount.Sales_Code = ? abfragst?
        Pre-Coffee-Posts sind mit Vorsicht zu geniessen!

        Kommentar


        • #5
          Das ist mir auch gerade eingefallen, kurz bevor ich Deine Antwort gesehen habe.
          Aber wie muss ich das machen?

          So, jedenfalls geht es nicht:
          PHP-Code:
              public static function getData_neu($pProfilWahl$Sales_Code,  &$pResultRecord)
              {
                  
          $db appDB::getInstance();        
                  return 
          $db->select(
                      
          'SELECT `No`, No2, Beschreibung, Rippen, Bestand, Discount, round((navlager.Preis * (( 100.0 - navdiscount.Discount) / 100.0)), 2) AS preis
                          FROM navlager LEFT JOIN navdiscount
                          ON 
                          navdiscount.Code = navlager.Artikelrabattgruppe
                          AND
                          navdiscount.Sales_Code = ?
                          WHERE
                          AND Profil = ?
                          AND sichtbar = 2
                          ORDER BY No2'
          ,
                      
          $pResultRecord, [
                          
          $db->createParam((string) $Sales_Code),
                          
          $db->createParam((int) $pProfilWahl),
                      ],
                      
          appDB::STMT_OPTION_PERSISTENT
                  
          );
              } 

          Kommentar


          • #6
            Ok, das überflüssige AND rausgenommen, jetzt geht es, aber der Preis wird mit 0 angegeben.

            Kommentar


            • #7
              public static function getData_neu($pProfilWahl, $Sales_Code, &$pResultRecord)
              {
              $db = appDB::getInstance();
              return $db->select(
              'SELECT `No`, No2, Beschreibung, Rippen, Bestand, Discount, round((navlager.Preis * (( 100.0 - IFNULL(navdiscount.Discount, 0)) / 100.0)), 2) AS preis
              FROM navlager LEFT JOIN navdiscount
              ON
              navdiscount.Code = navlager.Artikelrabattgruppe
              AND
              navdiscount.Sales_Code = ?
              WHERE
              AND Profil = ?
              AND sichtbar = 2
              ORDER BY No2',
              $pResultRecord, [
              $db->createParam((string) $Sales_Code),
              $db->createParam((int) $pProfilWahl),
              ],
              appDB::STMT_OPTION_PERSISTENT
              );
              }
              So sollte es klappen
              Pre-Coffee-Posts sind mit Vorsicht zu geniessen!

              Kommentar


              • #8
                Ja, Super - vielen Dank und einen schönen Restsonntag...

                Kommentar

                Lädt...
                X