Ergebnis 1 bis 4 von 4

Thema: FE Modul - richtigen Wert ausgeben der per foreignKey belegt wurde

  1. #1
    Contao-Nutzer Avatar von xs-hoppelhase
    Registriert seit
    12.07.2009.
    Ort
    Gera - Thüringen
    Beiträge
    125

    Standard FE Modul - richtigen Wert ausgeben der per foreignKey belegt wurde

    Hallo,

    habe zwei Datentabellen. In der ersten Tabelle erhält das Feld "Stadt" seine Options über ein ForeignKey auf die zweite Tabelle. In der zweiten werden dann die Städte gepflegt.

    Nun habe ich ein FE Modul, dass alle Datensätze aus der ersten Tabelle ausgeben soll. Leider gibt er mir nun beim Feld "Stadt" die ID aus der zweiten Tabelle aus, anstelle des Wertes (z. B. Musterstadt).

    Gibts da ne Contao-eigene Funktion den richtigen Wert zur ID zu beziehen, oder muss ich das selbst über Datenbankabfragen machen!?

    Grüße, Andy

  2. #2
    Contao-Fan Avatar von deerwood
    Registriert seit
    24.11.2009.
    Ort
    Hamburg
    Beiträge
    344

    Standard

    Hi Andy,

    warum nimmst Du keinen JOIN beim auswählen der Datensätze?

    LG, Georg

  3. #3
    Contao-Nutzer Avatar von xs-hoppelhase
    Registriert seit
    12.07.2009.
    Ort
    Gera - Thüringen
    Beiträge
    125

    Standard

    Hallo Georg,

    ach verdammt, irgendwie vergisst man, dass das Datenbanksystem ja auch sinnvoll genutzt werden kann ;-) Hmm ... mein letzter Join ist schon ein bisschen her und dann auch noch mit dem nicht sql-konformen MS-Access. Deswegen hoffe ich, dass du mir ein wenig helfen kannst.

    Hier mal jetziges SQl-Statement (etwas verkürzt, da sehr lang):

    PHP-Code:
    $immoQuery $this->Database->prepare("SELECT * FROM tl_immo_expose
    WHERE object_category=?
    AND object_status=?
    AND object_type LIKE ?
    AND city LIKE ?
    [...]
    ORDER BY rooms,stories ASC"
    )
    ->
    execute($object_category,'available',$object_type,$city,[...]); 
    Ersetzt werden muss in den Results der Wert für "city" aus der tabelle "tl_immo_city".

    +--+-----+
    |id |city |
    +--+-----+
    |2 |gera|
    |3 |jena|
    +--+-----+

    Und nun stoß ich schon auf das erste Problem, ich brauch ja alle Datensätze -> also "select *".

    Kann ich da überhaupt sowas hier machen "SELECT *.tl_immo_expose, city.tl_immo_city [...] JOIN city "ON city.tl_immo_expose = city.tl_immo_city"".

    Grüße, Andy

  4. #4
    Contao-Fan Avatar von deerwood
    Registriert seit
    24.11.2009.
    Ort
    Hamburg
    Beiträge
    344

    Standard

    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

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Ähnliche Themen

  1. Richtigen selektor finden
    Von BuchwaldM im Forum Layout / Templates / Holy Grail
    Antworten: 7
    Letzter Beitrag: 17.01.2011, 23:36
  2. cron.php an richtigen Cronjob anschliessen, geht das?
    Von Dani im Forum Entwickler-Fragen
    Antworten: 9
    Letzter Beitrag: 04.08.2010, 03:48
  3. if no Content = Modul gar nicht per HTML ausgeben
    Von content im Forum Layout / Templates / Holy Grail
    Antworten: 3
    Letzter Beitrag: 22.06.2010, 09:34
  4. Modul (HTML) via ID in PHP-Script einbinden/ausgeben
    Von goisko im Forum Layout / Templates / Holy Grail
    Antworten: 2
    Letzter Beitrag: 10.06.2010, 11:51
  5. Uhrzeit beim Modul Nächste Events mit ausgeben
    Von Russe im Forum Nachrichten/Events/FAQ
    Antworten: 4
    Letzter Beitrag: 07.12.2009, 16:20

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •