Hallo Mitglieder dieses Forums,
vor ein paar Wochen hatte ich die Aufgabe bestimmte Informationen, die bei
uns per SQL erfragt werden, bei der Anfrage durch neuere aus einer weiteren
(aktuelleren) Tabelle zu ersetzen. (Es handelt sich dabei um eine neue
Bearbeitungsnummer, die anstelle der alten verwendet werden soll)
Wir haben dazu einen Dispatcher, der Anfragen an die Datenbank vorfiltert und
weiterreicht. Das Dispatcher-Skript darf dabei allerdings nicht verändert
werden, da es zu einem bereits (durch die Regulierungsbehörde) zertifizierten
Verarbeitungssystem gehört.
Die Anfrage selbst im Dispatcher-Skript (PHP) besteht aus zwei
verschiedenenen aufeinanderfolgenden Queries, die unterschiedliche Tabellen
(und Felder) ansprechen, da die Tabellen untereinander verknüpft sind. Die
Daten werden jeweils in einem Array gesammelt und abschliessend
zurückgegeben.
Hier mal stark vereinfacht dargestellt, wie das ungefähr aussieht:
Jeder Query enthält bereits einen Platzhalter für einen Filter, der bislang nicht
oder nur wenig genutzt wurde (SORT, LIMIT), aber nun für diese Aufgabe
verwendet werden soll.
Die Bearbeitungs-Nummer-Abfrage (die erweitert werden soll) befindet sich im
ersten Query.
Normalerweise würde ich einen UNION-Befehl dafür verwenden, der das
Ergebnis des äusseren SELECTs einfach ersetzt:
Soweit, so gut, aber da gibt es noch den zweiten Query in dem nichts
verändert werden soll, aber (zwangsläufig) denselben Filter verwendet. Fazit:
das Skript bricht (berechtigterweise) mit einem Fehler ab.
Ich hab's jetzt zwar aufgegeben, aber neugierig bin ich trotzdem: gibt es denn
überhaupt eine Möglichkeit diesen Filter beim zweiten Query unwirksam zu
machen bzw. gibt es einen Query, bei dem der Filter nur bei einer bestimmten
Bedingung wirksam wird? Eine "Bedingte Anweisung" im Query selbst also?
Ich wäre sehr dankbar für eure Hinweise und Ideen!
Ciao
vor ein paar Wochen hatte ich die Aufgabe bestimmte Informationen, die bei
uns per SQL erfragt werden, bei der Anfrage durch neuere aus einer weiteren
(aktuelleren) Tabelle zu ersetzen. (Es handelt sich dabei um eine neue
Bearbeitungsnummer, die anstelle der alten verwendet werden soll)
Wir haben dazu einen Dispatcher, der Anfragen an die Datenbank vorfiltert und
weiterreicht. Das Dispatcher-Skript darf dabei allerdings nicht verändert
werden, da es zu einem bereits (durch die Regulierungsbehörde) zertifizierten
Verarbeitungssystem gehört.
Die Anfrage selbst im Dispatcher-Skript (PHP) besteht aus zwei
verschiedenenen aufeinanderfolgenden Queries, die unterschiedliche Tabellen
(und Felder) ansprechen, da die Tabellen untereinander verknüpft sind. Die
Daten werden jeweils in einem Array gesammelt und abschliessend
zurückgegeben.
Hier mal stark vereinfacht dargestellt, wie das ungefähr aussieht:
PHP-Code:
function getData( $customer, $id, $filter='' )
{
$data = array();
$sql = "SELECT name, bid FROM tab1 WHERE id = '" . $id . "'" . $filter;
[..] // Daten werden überprüft und in $data umkopiert
$bId = $result['bid'];
$sql = "SELECT benutzer, kundennr, bestellnr FROM tab2 WHERE bid = '" . $bId . "'" . $filter;
[..] // Daten werden überprüft und in $data umkopiert
[..] // ... weitere Verarbeitungsschritte
return $data;
}
oder nur wenig genutzt wurde (SORT, LIMIT), aber nun für diese Aufgabe
verwendet werden soll.
Die Bearbeitungs-Nummer-Abfrage (die erweitert werden soll) befindet sich im
ersten Query.
Normalerweise würde ich einen UNION-Befehl dafür verwenden, der das
Ergebnis des äusseren SELECTs einfach ersetzt:
PHP-Code:
$filter = " UNION SELECT name, bid FROM tab3 WHERE id = '" . $id . "'";
verändert werden soll, aber (zwangsläufig) denselben Filter verwendet. Fazit:
das Skript bricht (berechtigterweise) mit einem Fehler ab.
Ich hab's jetzt zwar aufgegeben, aber neugierig bin ich trotzdem: gibt es denn
überhaupt eine Möglichkeit diesen Filter beim zweiten Query unwirksam zu
machen bzw. gibt es einen Query, bei dem der Filter nur bei einer bestimmten
Bedingung wirksam wird? Eine "Bedingte Anweisung" im Query selbst also?
Ich wäre sehr dankbar für eure Hinweise und Ideen!
Ciao

Kommentar