Vergleich von 2 Spalten aus unterschiedlichen Datenbanken.
m_jimmy
- php
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?
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
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.
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
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 ...
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";
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ä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 ...
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ä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";
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?
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 NummerIch 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
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 NummerIch 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
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
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