Contao-Camp 2024
Ergebnis 1 bis 3 von 3

Thema: Komplexeres IN Array SQL Query mit doctrine umsetzen

  1. #1
    Contao-Nutzer
    Registriert seit
    03.12.2014.
    Beiträge
    51

    Standard Komplexeres IN Array SQL Query mit doctrine umsetzen

    Hi Forum,

    ich kämpfe mit der Umsetzung eines SQL Query unter 4.9. Ich hole mir in einem Frontendtemplate, Daten direkt aus der DB. Ich habe aus einem anderen Query ein Array mit IDs erhalten und benutze dieses Array nun um zu prüfen ob kompatible Modell in der Tabelle drin stehen.

    Ich verwende diese "doctrine syntax" und die Abfrage funktioniert hervorragend:

    HTML-Code:
    $statement = $db->executeQuery('SELECT * FROM tbl_models where publish = 1 AND id IN (?) order by name',
                array($models),
                array(\Doctrine\DBAL\Connection::PARAM_INT_ARRAY)
                );
    Soweit so gut. Nun das Problem. Das genannte Array
    Code:
    $models
    enthält alle kompatiblen Modelle. Ich habe nun ein zweites Array, welches die IDs der zertifizierten Modelle enthält.

    Im Ergebnis brauche ich eine Ausgabe, die mir die zertifizierten Modelle zuerst auflistet und entsprechend kennzeichnet.

    Mein SQL Query ist rel klar und funktioniert auch wunderbar:
    Code:
    SELECT name, if(id IN(1,8,26), 'certified', '') as certified FROM tbl_models WHERE id IN(1,2,3,8,10,11,12,15,19,23,24,26,27,28,29) ORDER BY certified desc, NAME
    So ein Query bekomme ich nicht für die Doctrine Syntax "übersetzt". Es scheitert auch schon daran, dass ich die notwendigen Anführungszeichen für einen Wert in einer neuen, virtuellen Spalte, irgendwie nicht escaped bekomme. Selbst eine einfache Konstante ohne Bedingung nach dem Muster
    Code:
    SELECT name, 'ja' AS certified FROM ...
    , scheitert.

    Kann man überhaupt "eigene Spalten" in Doctrine verwenden und wenn ja, wie?
    Hätte jemand eine Idee, wie die Syntax für mein Beispiel aussehen müsste?

    DANKE schon mal im Voraus!

  2. #2
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.042
    Partner-ID
    10107

    Standard

    Warum scheitert das? Poste die Fehlermeldung.
    » sponsor me via GitHub or PayPal or Revolut

  3. #3
    Contao-Nutzer
    Registriert seit
    03.12.2014.
    Beiträge
    51

    Multimedia

    Vielen Dank, Spooky, für die schnelle Antwort und sorry, dass ich das erst jetzt wieder anschauen kann.

    As usual, it´s all about Syntax ...

    Ich fand die Fehlermeldung leider sehr kryptisch aber beim genaueren Hinsehen, sah es nicht nach einem Escape-Fehler aus. Meine Syntax bei mehreren Array Parametern für das IN-Argument war einfach falsch.

    So geht es richtig (Bzw. ich bekomme so auf jeden Fall die richtige Lösung):

    Code:
    $statement = $db->executeQuery('SELECT name, IF(id IN(?), \'certified\',\'\') AS validated FROM tbl_models WHERE id IN (?) ORDER BY certified desc, NAME',
                array($models,$certified),array(\Doctrine\DBAL\Connection::PARAM_INT_ARRAY,\Doctrine\DBAL\Connection::PARAM_INT_ARRAY)
                );
    Hinterher siehts immer völlig klar aus ...

    Ich hoffe das hilft auch noch jemanden anders und VG

Aktive Benutzer

Aktive Benutzer

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

Lesezeichen

Lesezeichen

Berechtigungen

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