Ankündigung

Einklappen
Keine Ankündigung bisher.

Mehrere Abfragen

Einklappen

Neue Werbung 2019

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

  • Mehrere Abfragen

    Hallo

    Ich versuche grad im moment meine Abfragen zu optimieren.

    PHP-Code:
    $query $db->query("SELECT * FROM Shop_Cart WHERE Session = '".session_id()."'");    

    if(
    $query->num_rows 0){
    while(
    $DB_Cart $query->fetch_object()){

        
    $query2 $db->query("SELECT * FROM Shop_Artikel WHERE ArtikelNr = '".$DB_Cart->ArtikelNr."'");
        if(
    $DB_Artikel $query2->fetch_object()){ 
    Was ich hiermit mache:
    Ich frage die tabelle [Shop_Cart] ab nach allen Artikel die ein User in seinem Warenkorb hat. Jetzt möchte ich die Artikel Daten aus [Shop_Artikel] hohlen, zB. Preis, Lagerbestand, Beschreibung.

    Was ich möchte:
    Das ganze läst sich doch über join zusammen fassen? oder solte man hier doch lieber mit multi-query arbeiten?

    Mein Versuch
    PHP-Code:
        $db->query("SELECT 
                c.ArtikelNr,
                c.Anzahl,
                a.ArtikelNr,
                a.Artikel,
                a.Lagerbestand
              FROM
                Shop_Cart,
                Shop_Artikel
              WHERE
                c.ArtikelNr = a.ArtikelNr"
    );    
        
        
    $query $db->query($a);    
        
            while(
    $DB_Cart $query->mysqli_fetch_array()){
                print 
    'Artikel Nr: '.$DB_Cart->ArtikelNr.'<br>';
                print 
    'Anzahl: '.$DB_Cart->Anzahl.'<br>';
                print 
    'Lagerbestand: '.$DB_Cart->Lagerbestand.'<br>';
        } 

  • #2
    1. Du hast die Aliase a und c nicht vergeben, die Felder die du selektierst dürften daher unbekannt sein und werfen wohl einen Fehler.
    2. Verwende statt FROM x,y WHERE ... lieber einen expliziten Join, also JOIN y ON x.id = y.id (Obwohl das der Query Optimizer vermutlich erkennt und für dich ausbessert.)

    Kommentar


    • #3
      So in etwa dan?

      PHP-Code:
      SELECT 
          c
      .ArtikelNr,
          
      c.Anzahl,
          
      c.Session,
          
      a.ArtikelNr,
          
      a.Artikel,
          
      a.Lagerbestand
      FROM
          Shop_Artikel a
      LEFT JOIN
          Shop_Cart c
      ON
          c
      .Session '123456789' 
      im moment gibt er mir aber noch zu viele daten aus
      was meinst du mit query optimizer?

      Kommentar


      • #4
        Deine ON-Bedingung ist nicht korrekt. Du willst ja zwei Tabellen verbinden mit dem JOIN, das ON gibt an Hand welcher Felder das gemacht wird. In deinem Fall ist das wohl c.ArtikelNr und a.ArtikelNr (das brauchst du übrigens nur einmal zu selektieren, weil die ja gleich sein müssen.)
        Außerdem würde es mehr Sinn machen wenn du FROM und JOIN vertauschen würdest. Also aus dem Warenkorb auslesen und dann alle Infos zu suchen als, so wie jetzt, alle Produkte zu suchen und dann schauen welche davon im Warenkorb liegen.

        Der Query Optimizer ist ein Teil des (My)SQL-Interpreters der versucht deine Abfragen zu optimieren, indem er versucht zu erraten was du tatsächlich willst. (Im Beispiel von deinen 1. Beitrag einen Join, obwohl du nirgendwo Join geschrieben hast.) Der läuft allerdings im Hintergrund und braucht dich eigentlich nicht brennend interessieren. Im Zweifelfall solltest du einfach das richtige (und performanteste) Statement verwenden, dann muss da auch nichts erraten werden.

        Kommentar


        • #5
          Hab es jetzt gelöst

          passt es so?

          PHP-Code:
          <?php
              
              $query 
          $db->query("SELECT 
              c.ArtikelNr,
              c.Anzahl,
              c.Session,
              a.ArtikelNr,
              a.Artikel,
              a.Lagerbestand
          FROM
              Shop_Cart c
          JOIN
              Shop_Artikel a
          ON
              a.ArtikelNr = c.ArtikelNr
          AND
              c.Session = '"
          .session_id()."'");    
              
                  while(
          $DB_Cart $query->fetch_object()){
                      print 
          'Artikel Nr: '.$DB_Cart->ArtikelNr.'<br>';
                      print 
          'Anzahl: '.$DB_Cart->Anzahl.'<br>';
                      print 
          'Lagerbestand: '.$DB_Cart->Lagerbestand.'<br>';
              }
                      
          ?>

          Kommentar

          Lädt...
          X