dedlfix: SQL Abfrage in PHP mit AS

Beitrag lesen

echo $begrüßung;

SELECT *, (SELECT status FROM tabelle2 WHERE tabelle1.processingStatus = tabelle2.id) AS test FROM
tabelle1 WHERE Feld1 LIKE 'irgend eine Postvariable' OR
test LIKE 'irgend eine Postvariable';
Ohne die letzte LIKE-Anweisung funktioniert die Abfrage eiwandfrei.

Ein WHERE interessiert sich nicht für Dinge, die in der SELECT-Klausel aufgeführt sind, da diese zum Zeitpunkt der WHERE-Auswertung noch nicht bekannt sind. In WHERE kann man deshalb nicht auf irgendwelche Aliasnamen oder dort berechnete Werte Bezug nehmen. Das WHERE filtert aus den FROM-Tabellen die Datensätze, die zur Ergebnismenge gehören sollen. Du kann nicht eher auf diese Ergebnismenge Bezug nehmen, als diese ermittelt wurde. Es gibt aber noch die HAVING-Klausel, die dann die gefilterte und berechnete Ergebnismenge noch einmal einschränken kann. MySQL beachtet HAVING auch dann, wenn kein GROUP BY verwendet wurde. Ein HAVING ist in der Lage, auf Daten und Metadaten der Ergebnismenge Bezug zu nehmen. Allerdings sollt man versuchen, die Einschränkung in das WHERE statt in ein HAVING aufzunehmen, denn für berechnete Werte gibt es keinen Index, den man verwenden könnte. Wenn ich mir deinen Fall genauer ansehe, denke ich, dass du die beiden Tabellen lieber mit einem JOIN verbinden solltest. Der findet ja in der FROM-Klausel statt und die WHERE-Klausel kann auf die dort "entstehenden" Felder (inklusive Alianamen der Tabellen) Bezug nehmen.

echo "$verabschiedung $name";