echo $begrüßung;
Ich will mit der über den Join geholten zimmerid weiterarbeiten, wie gesagt auf dem Server direct funktioniert das, mit dem gewünschten Ergebnis.
Wenn ich zimmer.id nehmen würde, ist das Ergebnis für jedes Hotel leer, sobald für ein Hotel die Bedingung nicht zutrifft!
Unknown column 'zimmerid' in 'where clause'
Das heisst dass es diese Feld nicht gibt. Auch wenn du am Anfang bei SELECT sagtst "zimmer.id AS zimmerid" kannst du nicht in derselben Abfrage auf zimmerid zugreifen [...]
Aber dann liefert das Ergebnis Null
Wenn du zimmer.id im Subquery notierst, greift es auf die Tabelle zimmer des Subquery zu. Du möchtest stattdessen den Wert aus dem äußeren Statement. Der steht jedoch beim WHERE noch nicht zur Verfügung. Die WHERE-Klasel schränkt erst die vom FROM (inklusive JOIN) gelieferte Datenmenge ein, bevor es die Spalten des SELECT berechnet. Du kannst auf Gegebenheiten im SELECT keinen Bezug nehmen. Erst ab der HAVING-Klausel ist das möglich.
auch direct auf dem Server, wie ich schon schrieb. Dagegen funktioniert die Abrage mit zimmerid auf dem Server so, das die gewünschten Datensätze ohne Fehlermeldung geliefert werden.
Du widersprichst dir gerade. Selbst wenn das erste PHP heißen sollte, gänge diese Abfrage auch auf dem Server nicht.
Auch muss ich in der Unterselectabfrage nicht mal die Tabelle zimmer angeben, weil der Server die zimmerid aus der Join noch hat.
Wenn aus dem Join ein zimmerid hervorgeht, dann ist das aber nicht das "zimmer.id AS zimmerid" aus dem SELECT sondern ein anderes.
Wo liegt der Unterschied Server Html/bzw. PHP -Aufruf? Andere Sicherheitsbestimmungen?
Nein, die SQL-Syntax unterliegt keinen Sicherheitsbstimmungen. Den Unterschied zwischen der Anfrage, die du über PHP gesendet hast und der direkt verwendeten wirst du sicher sehen, wenn du genau hinschaust.
Hat jemand einen TIPP?
Mach es den potenziellen Antwortenden leichter, indem du das Statement lesbarer formatierst als den Buchstabenhaufen aus dem OP. Beispielsweise so:
SELECT
hotel.id AS hotelid,
zimmer.id AS zimmerid,
belegungen.id AS belegungenid
FROM hotel
LEFT JOIN zimmer ON zimmer.hotelid = hotel.id
LEFT JOIN belegungen ON (zimmer.id = belegungen.roomid)
WHERE
hotel.ort = '7' AND
hotel.land = '11' AND
hotel.agb != '' AND
hotel.storno != '' AND
(zimmer.status = '1' OR zimmer.status = '2') AND
NOT EXISTS (
SELECT
belegungen.roomid,
belegungen.mindauer AS minfalse,
belegungen.status AS statusfalse
FROM belegungen, zimmer
WHERE
zimmerid
= belegungen.roomid AND
(((belegungen.buchstart <= '1215576001' AND belegungen.buchend >= '1215576001') OR
(belegungen.buchstart <= '1216267201' AND belegungen.buchend >= '1216267201')) OR
(belegungen.buchstart > '1215576001' AND belegungen.buchend < '1216267201')) AND
(belegungen.mindauer > '8' OR belegungen.status = '3')
)
echo "$verabschiedung $name";