m_jimmy: Vergleich von 2 Spalten aus unterschiedlichen Datenbanken.

Ich habe eine mssql - datenbank und eine mysql-datenbank.

In der mssql-datenbank sind alle Angebotsnummern gespeichert - in der mysql-datenbank sind zum einen nicht alle gespeichert und zum anderen sind sie kategorisiert.

Jetzt möchte ich gerne aus der mssql-datenbank die Rechnungen sammeln, die zu einem Angebot das in der mysql-datenbank gespeichert ist korrellieren (gleiche nummer).

Ich hab jetzt zunächst einen Select gemacht, um die Angebotsnummern aus der mysqltabelle zu holen.

$SQL="SELECT wwsnum, zeitstempel FROM pro_angcheck WHERE wwsstatus!='auftragsbestätigung' AND ang_wert='1'  ORDER BY wwsnum ASC";
$RES= mysql_query( $SQL ) or die( mysql_error() );
while (list($wwsnum, $zeitstempel)=mysql_fetch_row($RES))

jetzt möchte ich quasi die Abfrage in der mssql tabelle starten, weiss aber nicht, wie ich das jetzt in den Where Satz integriere, dass nur die Rechnungen gesucht werden, die eine von den oben ausgegebenen Nummern haben.

$SQL1="SELECT Nummer,Datum FROM wwspro.dbo.Formular_Rechnung WHERE ?????  ORDER BY Nummer ASC";
$RES1= mssql_query( $SQL1) or die( mssql_error() );
while(list($nummer, $datum)=mssql_fetch_row($RES1))

{
echo "$nummer, $datum <br>";
}

Wäre es zweimal die gleiche Datenbank, könnte ich es hintereinander packen, aber so fehlt mir leider das KnowHow - kann mir jemand weiterhelfen?

  1. Ahoi m_jimmy,

    Wäre es zweimal die gleiche Datenbank, könnte ich es hintereinander packen, aber so fehlt mir leider das KnowHow - kann mir jemand weiterhelfen?

    du könntest das zusammenpacken das DBMS übernehmen lassen, da du aber 2
    nutzt musst du dies tun. also:

    ????? <= mssqlNummer=mysqlNummer1 OR mssqlNummer=mysqlNummer2 OR mssqlNummer=mysqlNummer3 ...

    ganz grob. geht bestimmt auch kürzer.

    MfG

    1. Danke Daniel,

      genau um dieses "kürzer" geht es mir, da ich etwa 500 nummern vergleichen muss - und daher eine entsprechende Formulierung finden sollte, die das abbildet.

      Vielleicht kann mir da ja jemand weiterhelfen, wie ich diese mehrfachabfrage basteln kann.

  2. Hi,

    $SQL1="SELECT Nummer,Datum FROM wwspro.dbo.Formular_Rechnung WHERE ?????  ORDER BY Nummer ASC";

    ... WHERE Nummer IN (deineZuvorGefundenenMitKommaGetrennt) ORDER BY ...

    Beispiel:
    ... WHERE Nummer IN (1,2,3,4,8,9,15) ORDER BY ...

    Den String mit den einzelnen Nummern musst du in PHP zusammenbasteln.
    So geht das zumindest in mySql, kann sein, dass du in mssql vor Nummer noch den Name der DB schreiben musst, also "dbName.Nummer".

    mfG,
    steckl

    1. Hi stefan,

      hast du mir noch nen Tipp, wie ich das in php zusammenbastle?
      Das ist genau mein Problem ...

      Beispiel:
      ... WHERE Nummer IN (1,2,3,4,8,9,15) ORDER BY ...

      1. echo $begrüßung;

        hast du mir noch nen Tipp, wie ich das in php zusammenbastle?

        Beim Abfragen ein Array anzulegen und dieses mit implode() in einen String wandeln wäre die einfachste Methode. Den String zu Fuß zusammenzubauen wäre eine weitere, aber da hat man immer das Problem des ersten oder letzten Trennzeichens zu beachten.

        echo "$verabschiedung $name";

        1. Okay - meine einzige Schwierigkeit besteht jetzt noch darin, aus dem ersten Select die Werte in ein array zu bekommen.

          $SQL="SELECT wwsnum FROM pro_angcheck WHERE wwsstatus!='auftragsbest&auml;tigung' AND ang_wert='1'  ORDER BY wwsnum ASC";
          $RES= mysql_query( $SQL ) or die( mysql_error() );
          while (list($wwsnum)=mysql_fetch_row($RES))
          $test=array($wwsnum);
          $ausgabetest = implode(",", $test);

          damit funktioniert es zumindest noch nicht ...

          1. echo $begrüßung;

            Okay - meine einzige Schwierigkeit besteht jetzt noch darin, aus dem ersten Select die Werte in ein array zu bekommen.

            Leg ein leeres Array vor dem Schleifendurchlauf an, und darin erweiterst du es um jeweils den abgefragten Wert.

            $SQL="SELECT wwsnum FROM pro_angcheck WHERE wwsstatus!='auftragsbest&auml;tigung' AND

            Was macht denn das HTML-Entity in deiner Datenbank? Eine Datenbank ist kein HTML-Kontext und sollte die Daten im Rohformat sammeln, damit sie später auch mal in einen anderen Kontext ausgegeben werden können als nur HTML.

            $RES= mysql_query( $SQL ) or die( mysql_error() );

            "mysql_query() or die(mysql_error())" wird immer wieder gern genommen, aber zu anderen als Debug-Zwecken ist dieses Konstrukt alles andere als sinnvoll. Flucht aus der Verantwortung gepaart mit Preisgabe von Datenbank-Interna zeugen nicht von feinem Stil.

            while (list($wwsnum)=mysql_fetch_row($RES))

            Diese Art an das Abfrageerbebnis zu kommen ist zwar im Handbuch unter list() aufgeführt aber ansonsten nicht sehr üblich. Wird das bei aus E_ALL gesetztem error_reporting ohne Ausgabe einer Hinweismeldung ausgeführt? Üblicherweise verwendet man Abfragen in diesem Stil (ergänzt um das Befüllen des Arrays):

            $wwsnums = array();
            while ($row = mysql_fetch_row($RES))
              $wwsnums[] = $row[0];

            echo "$verabschiedung $name";

            1. Erst mal herzlichen Dank, an alle, die mir bisher geholfen haben.

              Leider funktioniert bei meiner mssql-Version folgende Abfrage nicht:
              SELECT     Nummer, Datum
              FROM         Formular_Rechnung
              WHERE     (Nummer IN (' 0210000304, 02A100040405 '))
              ORDER BY Nummer

              Ich weiss, dass beide nummern enthalten sind, und trotzdem findet er kein Ergebnis.

              Hat jemand ahnung ob Nummer in - überhaupt funktioniert in mssql?

              1. Ahoi m_jimmy,

                Erst mal herzlichen Dank, an alle, die mir bisher geholfen haben.

                Leider funktioniert bei meiner mssql-Version folgende Abfrage nicht:
                SELECT     Nummer, Datum
                FROM         Formular_Rechnung
                WHERE     (Nummer IN (' 0210000304, 02A100040405 '))
                ORDER BY Nummer

                Ich weiss, dass beide nummern enthalten sind, und trotzdem findet er kein Ergebnis.

                Hat jemand ahnung ob Nummer in - überhaupt funktioniert in mssql?

                beide nummern sind evt in der spalte "Nummer" aber vll nicht der
                string ' 0210000304, 02A100040405 ' sprich setzt entweder beide
                zahlen werte in  hochkommas oder lass sie ganz weg.

                WHERE Nummer IN ('0210000304', '02A100040405')

                denk ich sollte funktionieren

                MfG

                1. Hi Daniel,

                  ich hab scheins noch ein ganz anderes Problem - es funktioniert zwar mit den Hochkomma, aber kann es sein, dass mit dem enthaltenen Buchstaben das ganze wieder stirbt?
                  Da sind nämlich regelmäßig buchstaben drin siehe:

                  02A100040405

                  Ahoi m_jimmy,

                  Erst mal herzlichen Dank, an alle, die mir bisher geholfen haben.

                  Leider funktioniert bei meiner mssql-Version folgende Abfrage nicht:
                  SELECT     Nummer, Datum
                  FROM         Formular_Rechnung
                  WHERE     (Nummer IN (' 0210000304, 02A100040405 '))
                  ORDER BY Nummer

                  Ich weiss, dass beide nummern enthalten sind, und trotzdem findet er kein Ergebnis.

                  Hat jemand ahnung ob Nummer in - überhaupt funktioniert in mssql?

                  beide nummern sind evt in der spalte "Nummer" aber vll nicht der
                  string ' 0210000304, 02A100040405 ' sprich setzt entweder beide
                  zahlen werte in  hochkommas oder lass sie ganz weg.

                  WHERE Nummer IN ('0210000304', '02A100040405')

                  denk ich sollte funktionieren

                  MfG

                  1. Hi,

                    ich hab scheins noch ein ganz anderes Problem - es funktioniert zwar mit den Hochkomma, aber kann es sein, dass mit dem enthaltenen Buchstaben das ganze wieder stirbt?
                    Da sind nämlich regelmäßig buchstaben drin siehe:

                    02A100040405

                    Wenn du das in Hochkomma schreibst wird es als String interpretiert. Wenn der String dann in der entprechenden Spalte vorkommt wird der Eintrag gefunden.

                    Wenn die Spalte Nummer als Zahl (z.B. INT) angelegt ist kann dort der Wert "02A100040405" garnicht hinein geschrieben werden.

                    mfG,
                    steckl

      2. Hi,

        hast du mir noch nen Tipp, wie ich das in php zusammenbastle?
        Das ist genau mein Problem ...

        Die IDs solltest du eh alle in einem Array haben.
        Dann kannst du sie mit implode zu einem String zusammenfuehren. Als ersten Parameter musst du in deinem Fall hier "," (Komma) angeben. Diesen String kannst du dann in dein Query setzen.

        mfG,
        steckl