Moin Andy,
... ich brauch ja alle Datensätze -> also "select *"
Nur zur Begriffsklärung: Du meinst sicher alle Daten-FELDER bzw SPALTEN der Tabelle 'tl_immo_expose' (die Daten-SÄTZE aka Records aka Zeilen bestimmt man über die WHERE Klause). Das kann man mit tabellen_name.* oder tabellen_alias.* schreiben (oder auch ausdrücklich durch Nennung aller Felder), siehe unten.
Zum JOIN: in Deinem Fall gehe ich davon aus, dass es zu jedem Wert in tl_immo_expose.city einen passenden Wert in tl_immo_city.id gibt; dann kann ein NATURAL aka INNER JOIN verwendet werden, den man meist einfach durch Auflistung aller beteiligten Tabellen in der FROM Klause schreibt, die JOIN-Bedingung wird dann einfach mit in die WHERE Klause aufgenommen. Im folgenden Statement werden auch Aliase verwendet, für die Tabellen und an einer Stelle auch für die per JOIN erhaltene Spalte mit dem Städte-Namen. Zu dem Spalten-Alias ist zu erwähnen, dass er in der WHERE Klause nicht verwendet werden darf. Hier das Statement mit Kommentaren:
PHP-Code:
SELECT exp.*, # alle Spalten der Tabelle 'tl_immo_expose'
cty.city AS city_name # Name der Stadt, Alias nötig, weil beide Tabellen eine Spalte 'city' haben
FROM tl_immo_expose AS exp, # Tabelle 1 des JOINs mit Tabellen-Alias
tl_immo_city AS cty # Tabelle 2 des JOINs mit Tabellen-Alias
WHERE exp.city = cty.id # Die JOIN-Bedingung, Tabellen-Aliase nötig, damit klar ist, welche Spalten gemeint sind
AND object_category = ? # Normale Filter. Keine Tabellen-Aliase nötig, wenn die Spalten nur in einer Tabelle existieren
AND object_status = ?
AND object_type LIKE ?
AND cty.city LIKE ? # Spalten-Alias nicht erlaubt, aber Qualifizierung mit Tabellen-Alias nötig,
[...] # damit nach dem NAMEN der Stadt gesucht wird, nicht nach der ID
ORDER BY rooms ASC, # Sortier-Richtung für JEDES Feld angeben,
stories ASC # allerdings ist ASC der Standard und kann weggelassen werden
In dem Result Set ($immoQuery, besser umbenennen in $immoResults) kannst Du nun sämtliche Felder von 'tl_immo_expose' über ihren Feld-Namen ansprechen, ohne jeden Präfix (weder 'exp' noch 'tl_immo_expose') also etwa einfach 'object_type' oder 'city' ... dabei ist 'city' immer noch die numerische ID der Stadt! Den Namen der Stadt kannst Du über das Spalten-Alias 'city_name' ansprechen, ebenfalls ohne jeden Präfix.
Und selbstverständlich kannst/solltest Du die Kommentare entfernen und Du kannst natürlich das Query auch kompakter schreiben (weniger Zeilen) ... obwohl ich es so VIEL les/wartbarer finde.
HTH und LG, Georg
Lesezeichen