Ankündigung

Einklappen
Keine Ankündigung bisher.

Probleme CC Filter + Abfragekombinierer

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Probleme CC Filter + Abfragekombinierer

    Hi,
    kann es sein, dass die Feldtypen "Abfragekombinierer" und "Teilbereich/Kappselung" nicht richtig funktionieren? Oder mache ich hier etwas falsch?
    Aufbau im Anhang. X 5.0.10, Contao 4.13.44

    Der Umkreis wird ignoriert, sobald mehr als eine Checkbox ausgewählt ist. Das gewünschte Verhalten wäre, dass innerhalb der Umkreissuche alle Einträge mit checkbox 1 oder checkbox 2 gefunden werden.

    CC Debugmodus gibt folgendes wieder:

    Code:
    SELECT cc_haendler_verarbeiter.* FROM cc_haendler_verarbeiter WHERE cc_haendler_verarbeiter.id IN(2528,2378,2255,2450,2463,2397,2515,2393,2188,2227,2203,2304,2363,2428,2448,2332,2267,2290,2473,2356,2216,2350,2352,2236,2459,2478,2403,2312,2396,2327,2257,2265,2518,2400,2491,2243,2245,2426,2289,1032,2198,2187,2402,2208,2197,2256,2477,2175,2250,2375,2318,2214,2172,2543,2370,2182,2376,2195,2266,2311,2399,2199,1033,2183,2292,2330,2276,2190,2385,2193,2297,3701,2309,2184,2285,2186,2382,2314,2419,2381,2535,2405,2390) AND cc_haendler_verarbeiter.baubeschlaghaendler='1' OR cc_haendler_verarbeiter.is_carpenter='1' AND cc_haendler_verarbeiter.publish='1'
    "Zeige alle Einträge bei leerem Filter" ist im Modul deaktiviert.

    * Aufteilen in verschiedene Filtersammlungen macht keinen Unterschied.
    Zuletzt geändert von EBL; 29.07.2024, 12:45.

  • #2
    Wir bekommen hier auch in X 5.0.16 SQL Fehlermeldungen in Verbindung mit den Elementen "Teilbereich / Kapselung". Screenshot zum Aufbau anbei. Diese Kapselung benötigen wir allerdings für eine logische Ausgabe



    Code:
    1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ')' at line 1 at /vendor/doctrine/dbal/src/Driver/PDO/Connection.php:71)"}
    Angehängte Dateien

    Kommentar


    • #3
      Ich habe den Aufbau mit reinen Checkbox-Filtern nachgestellt (siehe Screenshots). Das Query sieht korrekt aus und arbeitet entsprechend. Ich denke ein konkreter Filter selbst könnte das Problem sein.
      Der Umkreis-Filter oder Tags-Filter gibt eine ID Liste zurück, die in SQL mit id IN(...) gesetzt ist. Hier gibt es Funktions-Klammern.

      Eine Klammerung ist in dem Query offen oder zuviel. Wie lautet denn der gesamte Query? Reduziere auch mal das ganze Konstrukt, um zu schauen wo eine Klammer ggf. zu viel oder zu wenig kommt. Das ist zu abstrakt, um es einfach nach zu bauen.


      ---
      Für komplexe SQL Abhängigkeiten kann auch ein Eigene SQL Abfrage Filter genutzt werden oder allgemein der Hook-Callback Filter. Es ist im Backend nicht möglich alle Konstellationen abzudecken.
      Angehängte Dateien
      Zuletzt geändert von Tim; 26.08.2024, 08:59.
      http://www.premium-contao-themes.com

      Kommentar


      • #4
        Ich bekomme wegen dem Fehler kein Log von der ganzen Query. Funktioniert es bei dir, wenn du im ersten Teilbereich eine Umkreissuche einbaust? Ich glaube, die funkt dazwischen.

        Kommentar


        • #5
          Zitat von EBL Beitrag anzeigen
          Ich bekomme wegen dem Fehler kein Log von der ganzen Query. Funktioniert es bei dir, wenn du im ersten Teilbereich eine Umkreissuche einbaust? Ich glaube, die funkt dazwischen.
          Läuft der Query durch, wenn die Umkreissuche ausgeblendet ist?
          http://www.premium-contao-themes.com

          Kommentar


          • #6
            Initial ja, ohne Umkreissuche läuft zB der Seitenaufruf oder eine einfache Textsuche durch:
            Code:
            SELECT cc_haendler_verarbeiter.* FROM cc_haendler_verarbeiter WHERE (cc_haendler_verarbeiter.id IN(1032,1033,1034) ) LIMIT 0,900
            Mit Umkreissuche knallt es schon beim Seitenaufruf

            Allerdings kommen die SQL Fehler wieder, wenn man die Checkbox Filter in dem Bsp. tatsächlich nutzt. Was auffällt, ist dass die Filterung durch läuft, wenn die letzte Checkbox in der Kette (unabhängig vom Feld etc.) im FE gefiltert wird.
            Angehängte Dateien

            Kommentar


            • #7
              die Filterung durch läuft, wenn die letzte Checkbox in der Kette
              Ja, das macht Sinn.

              Das Problem wird sein, dass wenn KEINER der Checkbox-Filter gesetzt ist, eine Leere Klammerung im SQL entsteht. Leere Filter werden standardmäßig nicht in den Query aufgenommen. Ergo hast du einen leeren Klammer-Bereich. Das wiederum ist invalid. Ich denke da muss irgendein "blinder" Filter immer rein und sei es sowas: id>0 -> das deckt sich mit deiner Feststellung, dass der letzte Filter laufen muss.
              Zuletzt geändert von Tim; 26.08.2024, 10:05.
              http://www.premium-contao-themes.com

              Kommentar


              • #8
                Ich versuche eine zusätzliche Logik beim Erstellen des Query-Strings unterzubringen, die quasi offene Enden in separierten Parts (Klammerungen) schließt.
                http://www.premium-contao-themes.com

                Kommentar


                • #9
                  Das Problem wird sein, dass wenn KEINER der Checkbox-Filter gesetzt ist, eine Leere Klammerung im SQL entsteht. Leere Filter werden standardmäßig nicht in den Query aufgenommen.
                  Wenn keiner gesetzt ist, bekomme ich keinen Fehler, der Query zeigt mir auch an, dass die leeren Checkboxen ignoriert wurden. Soweit erstmal ok. Probleme tauchen dann auf, wenn eine Umkreissuche präsent ist (Aufbau wie in vorherigem Screenshot, mit aktiver Umkreissuche) oder wenn eine Checkbox gefiltert wurde, die nicht die letzte ist. Vllt hab ich das falsch verstanden, aber mit einem eigenen SQL Filter mit id > 0 bekomme ich ebenfalls den SQL Fehler (...right syntax to use near '' at line 1").
                  Angehängte Dateien
                  Zuletzt geändert von EBL; 27.08.2024, 09:30.

                  Kommentar


                  • #10
                    Zwischen zwei Filtern braucht es keinen AND Kombinierer. AND ist quasi Standard.

                    Das "Problem" ist nicht perse die Umkreissuche, sondern wenn weder Umkreissuche noch Freitext-Suche aktiv sind. Dann hat man eine leere Klammer. Ist Umkreissuche aktiv und Freitext-Suche leer kann es ebenfalls aktuell passieren, dass im SQL nach der Umkreissuche ein AND ergänzt wird, weil der Klammer-Filter dem System mitteilt, dass noch weitere Filter folgen. -> AND wird angehängt.

                    Damit entsteht folgendes im SQL: id IN(...) AND )
                    -> das ist invalid.

                    Aktuell kann man sich hier ebenfalls mit Vorbelegung abhelfen und den Suchfilter leer aktivieren oder ein Eigene SQL als letzten Filter vor Klammer zu setzen.

                    SQL Filter mit id > 0 bekomme ich ebenfalls den SQL Fehler
                    Der sollte meines Erachtens als letzter Filter platziert sein, vor Klammer zu.

                    Was natürlich auch geht ist Filter selbstständig zu aktivieren (Filter vorbelegen) via Input::get. Wenn das Szenario eintritt, dass der Benutzer keine Checkbox gewählt hat, quasi so zu tun, als wäre sie gesetzt. Damit umschifft man auch leere Klammern.

                    Wie gesagt, ich versuche solch lose Enden abzufangen. Ob dann bereits jede Konstellation out of the box möglich ist, ist schwer zu sagen.
                    Angehängte Dateien
                    Zuletzt geändert von Tim; 27.08.2024, 11:02.
                    http://www.premium-contao-themes.com

                    Kommentar

                    Lädt...
                    X