Ergebnis 1 bis 11 von 11

Thema: Filter eigenes SQL

  1. #1
    Contao-Nutzer
    Registriert seit
    02.08.2009.
    Beiträge
    67

    Standard Filter eigenes SQL

    Halli hallo,

    ich würde gerne den Filter "Eigenes SQL" von MM 2.3 nutzen - und zwar im Zusammenhang mit dem Get Parameter einer URL.

    Vorgeschichte
    Was sehr gut funktioniert ist:
    SELECT * FROM {{table}} WHERE `id` IN (2,3,5)

    Hier schreibe ich die IDs direkt in das SQL Statement vom Filter. Mir werden exakt die 3 Datensätze geliefert. Super!

    Problem
    Jetzt möchte ich die IDs (2,3 und 5) aber als Get Parameter übergeben und im Filter auswerten, also:
    URL
    Code:
    https://2023-dev.metamodels:8890/geteilte-sammlung.html?items=2,3,5
    Filter
    Code:
    SELECT * FROM {{table}} WHERE `id` IN ({{param::get?name=items}})
    Ärgerlicherweise wird immer nur der erste Datensatz (der mit der ID 2) ausgegeben.
    Die Datensätze 3 und 5 werden ignoriert.


    Frage
    Wie muss ich das denn schreiben, damit auch alle einzelnen IDs ausgegeben werden?


    Grüßerle

  2. #2
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.719
    User beschenken
    Wunschliste

    Standard

    such das Query mit Toolbar bei Doctrine - was steht da drinnen?

    oder die harte Tour
    PHP-Code:
    SELECT FROM {{table}} WHERE `idIN ({{param::get?name=items}}) XXX 
    erzeugt ein Error mit Ausgabe des Query

  3. #3
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.719
    User beschenken
    Wunschliste

    Standard

    Alternativ sollte auch die Filterregel Mehrfachauswahl gehen - z. B. auf Alias

    Code:
    https://2023-dev.metamodels:8890/geteilte-sammlung.html?items=alias2,alias3,alias5

  4. #4
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.719
    User beschenken
    Wunschliste

    Standard

    ... guck mal beim Verkehrszeichen in Eig-SQL: da gibts noch Angaben für "aggregate" - damit mal probieren - steht in CustomSql.php

  5. #5
    Contao-Nutzer
    Registriert seit
    02.08.2009.
    Beiträge
    67

    Standard

    So, habe ich das verstanden, hilft aber nichts:
    Code:
    SELECT * FROM {{table}} WHERE `id` IN ({{param::get?name=items&aggregate=list&recursive=1}})

  6. #6
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.719
    User beschenken
    Wunschliste

    Standard

    warum recursive?!?

    was steht denn nun in dem Query drinnen???!!

  7. #7
    Contao-Nutzer
    Registriert seit
    02.08.2009.
    Beiträge
    67

    Standard

    sorry...noch nie was von Doctrine gehört... musste erst mal schnallen, was Du von mir wolltest ;-)

    Code:
    Executing statement: SELECT * FROM mm_testmodel WHERE `id` IN (?) x (parameters: {params}, types: {types})
    {
        "sql": "SELECT * FROM mm_testmodel WHERE `id` IN (?) x",
        "params": {
            "1": "3,4"
        },
        "types": {
            "1": 2
        }
    }
    Angehängte Grafiken Angehängte Grafiken
    Geändert von whitedrow (20.11.2023 um 18:38 Uhr)

  8. #8
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.719
    User beschenken
    Wunschliste

    Standard

    das
    Code:
    3,4
    wird als kompletter String übergeben - muss ich mir mal ansehen...

  9. #9
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.719
    User beschenken
    Wunschliste

    Standard

    so! wir haben uns das angesehen... bei aggregate gabs den Typ "list", der aber gar nicht implementiert wurde... in der Hilfe erscheint der aber ... hat Oli H. im Jahre 2013 implementiert, weil er das für ein Projekt benötigte - offensichtlich war die weitere Nachfrage nicht so groß

    folgendes sollte nun gehen (nach Update):

    Als Liste
    domain.tld/de/liste?id=13,15,19

    PHP-Code:
    SELECT id FROM {{table}}
    WHERE id IN ({{param::get?name=id&aggregate=list}}) 

    Als Array
    domain.tld/de/liste?id[]=13&id[]=15&id[]=19

    PHP-Code:
    SELECT id FROM {{table}}
    WHERE id IN ({{param::get?name=id&aggregate=set}}) 

  10. #10

  11. #11
    Contao-Nutzer
    Registriert seit
    02.08.2009.
    Beiträge
    67

    Standard

    HERVORRAGEND!

    Läuft.

    Vielen Dank zonky

Aktive Benutzer

Aktive Benutzer

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

Lesezeichen

Lesezeichen

Berechtigungen

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