Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: SQL JOIN?

    Bonsai

    • Viel Schreiber
    • Beiträge: 4.127
    • Geschlecht:
    SQL JOIN?
    am: 18. September 2014, 10:48:22
    Ich hätte da mal gerne ein Problem ..... hat nix mit modified zu tun.

    Datenbanktabelle Kunden
    Kundennummer
    KundengruppenID

    Datenbanktabelle Rechnungen
    Rechnungsnummer
    Kundennummer
    KundengruppenID
    Datum_erfassung

    Wie kann ich den SQL Query umbauen?
    Code: SQL  [Auswählen]
    SELECT Rechnungsnummer, Kundennummer FROM Rechnungen WHERE KundengruppenID = 1 AND dateformat(Datum_erfassung,'YYYY') = 2013
    Das Feld KundengruppenID soll aus der Tabelle Kunden kommen, da ein gewisser Prozentsatz Kunden nicht in eine Gruppe sortiert war und das nachträglich geändert wurde, was aber die Tabelle Rechnungen nicht mitbekommt ....

    Das ist irgendein JOIN?

    Linkback: https://www.modified-shop.org/forum/index.php?topic=31080.0

    webald

    • modified Team
    • Beiträge: 2.791
    Re: SQL JOIN?
    Antwort #1 am: 18. September 2014, 11:39:09
    Code: SQL  [Auswählen]
    SELECT Rechnungen.Rechnungsnummer, Kunden.Kundennummer
      FROM Rechnungen
           INNER JOIN Kunden
              ON (Kunden.KundengruppenID = Rechnungen.KundengruppenID)
    WHERE Kunden.KundengruppenID=1

    Such mal nach Toad, das ist ein graphisches Tool zum Abfragen basteln.

    hpzeller

    • Experte
    • Beiträge: 4.129
    • Geschlecht:
    Re: SQL JOIN?
    Antwort #2 am: 18. September 2014, 12:50:07
    Code: PHP  [Auswählen]
    query("SELECT r.Rechnungsnummer, r.Kundennummer FROM Rechnungen r, Kunden k WHERE r.Kundennummer = k.Kundennummer AND k.KundengruppenID = 1 AND dateformat(r.Datum_erfassung,'YYYY') = 2013");

    Gruss
    Hanspeter

    Bonsai

    • Viel Schreiber
    • Beiträge: 4.127
    • Geschlecht:
    Re: SQL JOIN?
    Antwort #3 am: 18. September 2014, 13:06:56
    Besten Dank für die Antworten. Meine Abfrage ist noch ein wenig komplexer als ich oben schrieb, ich wollte es nur erstmal verstehen.

    Ich habe versucht den Code zu übersetzen in meinen SQL Dialekt (SQL Anywhere 12) und auf meine wirkliche Abfrage. SQL Anywhere meint, da wird noch ein "Korrelationsname" benötigt. Wenn ich die Doku richtig verstehe (vermutlich nicht :-D), sollte die Version von webald dann so aussehen:
    Code: SQL  [Auswählen]
    SELECT A.AuftragsNr, A.AuftragsKennung, B.KundenNr, A.Anschrift_Anrede, A.Anschrift_Firma, A.Anschrift_Name, A.Anschrift_Vorname, A.Anschrift_Zusatz, A.Anschrift_Ansprech, A.Anschrift_Strasse, A.Anschrift_HausNr, A.Anschrift_Ort, A.Anschrift_Plz, A.Anschrift_Land, A.Anschrift_Email, A.Summen_gesamt, A.bStatus_bezahlt, A.Datum_erfassung FROM $IQXX.FK_Auftrag A INNER JOIN $IQXX.FK_Kunde B ON B.lKundengruppenID = A.lKundengruppenID WHERE A.bStatus_storniert = 0 AND B.lKundengruppenID = 1 AND dateformat(A.Datum_erfassung,'YYYY') = 2014 AND A.AuftragsKennung = 3 ORDER BY days(A.Datum_erfassung) ASC

    Dann noch der Versuch von hpzeller:
    Code: SQL  [Auswählen]
    SELECT A.AuftragsNr, A.AuftragsKennung, A.KundenNr, A.Anschrift_Anrede, A.Anschrift_Firma, A.Anschrift_Name, A.Anschrift_Vorname, A.Anschrift_Zusatz, A.Anschrift_Ansprech, A.Anschrift_Strasse, A.Anschrift_HausNr, A.Anschrift_Ort, A.Anschrift_Plz, A.Anschrift_Land, A.Anschrift_Email, A.Summen_gesamt, A.bStatus_bezahlt, A.Datum_erfassung FROM $IQXX.FK_Auftrag A, $IQXX.FK_Kunde B WHERE B.lKundengruppenID = A.lKundengruppenID AND A.bStatus_storniert = 0 AND B.lKundengruppenID = 1 AND dateformat(A.Datum_erfassung,'YYYY') = 2014 AND A.AuftragsKennung = 3 ORDER BY days(A.Datum_erfassung) ASC

    Jedoch liefert mir das System bei beiden Querys, nachdem eine CPU etwa eine Minute auf Vollast lief das Ergebnis "System.OutOfMemoryException"  :lol1:

    Mir ist das jetzt zu blöd. Ich mach zwei Abfragen und lasse PHP die Daten im array aus der ersten Abfrage durch die der zweiten Abfrage ersetzen.

    Vor allem brauche ich mehrere unterschiedliche Abfragen .... da sitze ich ja einen Tag bis das fertig wäre.

    hpzeller

    • Experte
    • Beiträge: 4.129
    • Geschlecht:
    Re: SQL JOIN?
    Antwort #4 am: 18. September 2014, 13:19:32
    Hallo Bonsai

    Zitat
    Dann noch der Versuch von hpzeller:
    Code: SQL  [Auswählen]
     SELECT A.AuftragsNr, A.AuftragsKennung, A.KundenNr, A.Anschrift_Anrede, A.Anschrift_Firma, A.Anschrift_Name, A.Anschrift_Vorname, A.Anschrift_Zusatz, A.Anschrift_Ansprech, A.Anschrift_Strasse, A.Anschrift_HausNr, A.Anschrift_Ort, A.Anschrift_Plz, A.Anschrift_Land, A.Anschrift_Email, A.Summen_gesamt, A.bStatus_bezahlt, A.Datum_erfassung FROM $IQXX.FK_Auftrag A, $IQXX.FK_Kunde B WHERE B.lKundengruppenID = A.lKundengruppenID AND A.bStatus_storniert = 0 AND B.lKundengruppenID = 1 AND dateformat(A.Datum_erfassung,'YYYY') = 2014 AND A.AuftragsKennung = 3 ORDER BY days(A.Datum_erfassung) ASC

    Code: SQL  [Auswählen]
    B.lKundengruppenID = A.lKundengruppenID
    obiges findest Du in meinen Statement gar nicht, währe auch sinnlos*.

    Mein Vorschlag sah so aus
    Code: PHP  [Auswählen]
    query("SELECT r.Rechnungsnummer, r.Kundennummer FROM Rechnungen r, Kunden k WHERE r.Kundennummer = k.Kundennummer AND k.KundengruppenID = 1 AND dateformat(r.Datum_erfassung,'YYYY') = 2013");

    Du verwechselt das wahrscheinlich mit
    Code: SQL  [Auswählen]
    r.Kundennummer = k.Kundennummer
    aus meinem Statement.

    *Erleuterung:
    Wenn Du schreibst
    Zitat
    Das Feld KundengruppenID soll aus der Tabelle Kunden kommen, da ein gewisser Prozentsatz Kunden nicht in eine Gruppe sortiert war und das nachträglich geändert wurde, was aber die Tabelle Rechnungen nicht mitbekommt ....
    kann man folgendes nicht machen 'B.lKundengruppenID = A.lKundengruppenID', deshalb habe ich dir auch die Rechnungsnummer ('r.Kundennummer = k.Kundennummer') vorgesclagen.

    Gruss
    Hanspeter

    webald

    • modified Team
    • Beiträge: 2.791
    Re: SQL JOIN?
    Antwort #5 am: 18. September 2014, 13:52:42
    Darf ich raten? Du versuchst auf eine Lexware-Datenbank zuzugreifen? Ich haffe nur lesend. Falls ja:

    1. Es gibt einen ODBC-Treiber dafür, und der ging auch immer recht gut. Damit könntest Du die ganze Datenbank mit einem anderne Programm z. b. Access verknüpfen und alle Abfragen graphisch generieren und den SQL-Befehl dann in dein Programm bauen.

    2. Wenn es seit neustem möglichist direkt auf die Datebank zuzgreifen, dann google mal nach SQL Anywhere query tool. Da kannst Da dann auch graphisch eine Abfrage generieren und den SQL-Befehl anschließend in Dein Programm bauen.

    Aber nochmal: Nur lesend. In Rechnungs-/Buchhaltungssysteme darf nur jemand schreiben, der dazu autorisiert ist. Sonst kommt am Ende das FA und glaubt der Buchhaltung nicht mehr.

    Bonsai

    • Viel Schreiber
    • Beiträge: 4.127
    • Geschlecht:
    Re: SQL JOIN?
    Antwort #6 am: 18. September 2014, 14:04:15
    Ja, lesend auf Lexware. Den Treiber habe ich. Funktioniert auch super bei vielen Dingen, nur mit Abfragen über mehrere Tabellen stehe ich generell auf dem Kriegsfuß :-) Da ist der SQL Dialekt Wurst. :-)

    Mit Schreibzugriff wäre das Problem nicht da, da ich dann einfach alle Rechnungen mit der KundengruppenID aus der Kundentabelle überschreiben würde. Die Kundentabelle stimmt, da ich mir einen Query geschrieben habe der mir alle Kunden ohne Gruppe anzeigt und ich danach mit dieser Liste in Lexware die Gruppe nachgetragen habe. Das war eine §$%§$%§$ :motz: Arbeit!  :-!
    Mit der Lexware Oberfläche kann ich aber bereits gebuchte Rechnungen nicht ändern, also muss ich jetzt zwei Tabellen fragen um rauszufinden zu welcher Kundengruppe die Rechnung gehört.

    Und ich will doch eigentlich nur wissen an wen ich einen Katalog versenden soll.

    webald

    • modified Team
    • Beiträge: 2.791
    Re: SQL JOIN?
    Antwort #7 am: 18. September 2014, 14:12:09

    Bonsai

    • Viel Schreiber
    • Beiträge: 4.127
    • Geschlecht:
    Re: SQL JOIN?
    Antwort #8 am: 18. September 2014, 14:35:25
    Dankeschön! Ich habe mir das Teil mal installiert, und werde mich damit befassen wenn ich wieder mal Zeit habe. Im Moment habe ich nicht mal die Zeit hier im Forum gelegentlich vorbeizuschauen.

    Deshalb jetzt auch die quick & Dirty Lösung für den Join+ where clause :-) :
    Code: PHP  [Auswählen]
    $bill_list_original=$bill_list;
    $bill_list=array();
    foreach ($bill_list_original as $bill) {
            foreach ($customer_real_group as $customer_real) {
                    // if we found the customer
                    if ((int)$customer_real[0] === (int)$bill[2]) {
                            if ($post['customer_group'] === 'Alle') $bill_list[]= $bill;
                            if ($post['customer_group'] === $customer_real[1]) $bill_list[]= $bill;
                    }
            }
    }
     
    Werbung / Banner buchen
               
    anything