Ankündigung

Einklappen
Keine Ankündigung bisher.

Suche über Textfelder einzeln und in Kombination (Abhängigkeit)

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

  • Suche über Textfelder einzeln und in Kombination (Abhängigkeit)

    Hallo zusammen,

    ich suche nach einer Lösung, um in mehreren Textfeldern einzeln UND kombiniert suchen zu können.

    Konkret hab ich ein Filterset mit 2 Filtern (Typ: Textsuche) angelegt. Einmal für das Feld Name und den zweiten für Stadt.
    Im Frontend soll man nun nach (Name ODER Stadt) oder nach (Name UND Stadt) suchen können.

    1. Suche: Name = Schmidt -> Alle Einträge mit Schmidt im Namen
    Ergebnis: 17 (Richtig)

    2. Suche: Ort = Stuttgart -> Alle Einträge mit Stuttgart im Ort
    Ergebnis: 56 (Richtig)

    Jetzt das Problem:

    3. Suche: Name = Schmidt, Ort = Stuttgart -> Alle Einträge mit Schmidt im Namen und Stuttgart im Ort
    Ergebnis: 0 (Richtig)

    4. Suche: Name = Schmidtmeier, Ort = Stuttgart -> Alle Einträge mit Schmidtmeier im Namen und Stuttgart im Ort
    Ergebnis: 56 (Falsch), Da Schmidtmeier als Name nicht existiert, gibt CC alle 56 Einträge von Stuttgart aus.
    Richtig wäre 0, da es Schmidtmeier in Stuttgart nicht gibt.

    5. Suche: Name = Schmidt, Ort = Trulala -> Alle Einträge mit Schmidtmeier im Namen und Stuttgart im Ort
    Ergebnis: 17 (Falsch), Da Trulala als Ort nicht existiert, gibt CC alle 17 Einträge von Schmidt aus.
    Richtig wäre 0, da es Schmidt in Trulala nicht gibt.

    Leider gibt es für Textfelder keine Abhängigkeiten, auch habe ich jetzt verschiedene Einstellungen mit Strikt und Abfragekombinationen versucht. Ohne Erfolg.

    Hat jemand ein ähnliches Problem schon gehabt und lösen können?

    Grüße
    Steffen

  • #2
    Ich glaube die Änderungen ab CC 2.14.3 sind gut für dich. http://forum.premium-contao-themes.c...=9967#post9967
    Schau mal die erste Änderung. Der Textfilter reagiert nun auf die Ist strikt Checkbox. Ist diese nicht aktiv werden alle Suchen mit UND kombiniert.
    http://www.premium-contao-themes.com

    Kommentar


    • #3
      Ich habe ein ähnliches Problem: Nach Update auf CustomCatalog 2.15.0 & CustomElements 3.2.8 liefert mein Textfilter, wenn nicht-strikt, bei einem "falschen" Suchbegriff alle Einträge aus. Wenn der Filter allerdings auf strikt gestellt wird, liefert er gar keine Einträge mehr aus. Es werden im Katalog dann auch schon keine Einträge mehr angezeigt, bevor ich den Textfilter überhaupt benutze.
      Das gewünschte, frühere Verhalten ("falscher" Suchbegriff führt zu keinen Einträgen) kann ich momentan nicht erreichen.

      Kommentar


      • #4
        Danke für den Hinweis, Tim!
        Ich habe die neue Version nun installiert.

        Mein Problem besteht immer noch. Wahrscheinlich brauche ich wieder einen Deiner Tricks.
        Die Felder sollen ja einzeln UND kombiniert funktionieren.

        Wenn ich sie strikt setze, gibt CC keine Ergebnisse für die Suche in den Einzelfeldern zurück. Logisch weil sie mit "strikt" ja als "AND" verbunden sind.
        Kann ich das mit zusätzlichen, versteckten Feldern im Template lösen, die durch JS befüllt werden, wenn nur ein Feld abgefragt wird?

        Danke.

        Grüße Steffen

        Kommentar


        • #5
          Wenn ein Filter keine Ergebnisse liefert, wird dieser ignoriert, wenn in den Systemeinstellungen CC nicht strikt ist. Ist CC strikt. Wird der Filter einen unmöglichen Wert vergeben (id = -10 oder ähnlich. -10, wenn der Filter die ID=10 ist). (wenn man analysieren möchte) und damit ein 100% leeres Ergebnis produzieren.

          In den Liste-Einstellungen sollte ebenfalls deaktiviert sein "Zeige alle Einträge bei leerem Filter"
          Zuletzt geändert von Tim; 26.02.2018, 09:29.
          http://www.premium-contao-themes.com

          Kommentar


          • #6
            Zitat von Pandroid Beitrag anzeigen
            Danke für den Hinweis, Tim!
            Ich habe die neue Version nun installiert.

            Mein Problem besteht immer noch. Wahrscheinlich brauche ich wieder einen Deiner Tricks.
            Die Felder sollen ja einzeln UND kombiniert funktionieren.

            Wenn ich sie strikt setze, gibt CC keine Ergebnisse für die Suche in den Einzelfeldern zurück. Logisch weil sie mit "strikt" ja als "AND" verbunden sind.
            Kann ich das mit zusätzlichen, versteckten Feldern im Template lösen, die durch JS befüllt werden, wenn nur ein Feld abgefragt wird?

            Danke.

            Grüße Steffen
            Du meinst reale Felder unterschiedlicher Art, * also nicht die im Textfilter angecheckten Felder über die sich die Suche erstreckt.

            * Das wäre ein Filter vom Typo "Filterkombinierer" zwischen den jeweiligen Filtern.
            http://www.premium-contao-themes.com

            Kommentar


            • #7
              Wenn ich im Text-Filter zwei Felder (Attribute) wähle, erhalte ich im FE nur ein Suchfeld. Ich brauch aber 2 (Name / Ort).
              Daher habe im Filterset zwei Textfilter einmal für Name und einmal für Ort angelegt.
              Mit "Filterkombinierer" ändert sich bei mir in der Konstellation gar nichts.

              Kommentar


              • #8
                Willst du Name und Ort getrennt eingeben? Dann ist der Aufbau mit zwei Filtern erstmal korrekt.
                Der Filterkombinierer zwischen den beiden Filter auf "OR" (oder) setzen.

                Du kannst für die Zeit der Entwicklung CC in den debug Modus setzen:
                initconfig:

                $GLOBALS['PCT_CUSTOMCATALOG']['debug'] = true;

                Damit werden die SQL Queries im System-Log gespeichert. Da sieht man sehr gut wie sich das jeweilige Ergebnis zusammen setzt.
                Zuletzt geändert von Tim; 26.02.2018, 10:29.
                http://www.premium-contao-themes.com

                Kommentar


                • #9
                  Ja, getrennt. Ich habe beide Textfilter nicht "strikt" gesetzt und als Kombinierer OR gesetzt.
                  Einzelfelder funktioniert. Kombinierte Abfrage ergibt jetzt aber alle Treffer in Datenbank in Name und Ort -> also die Summe, aber nicht in Abhängigkeit.

                  System-Log
                  Code:
                  [COLOR=#333333][FONT=-apple-system][SIZE=14px]SELECT cc_adressen.* FROM cc_adressen WHERE cc_adressen.id IN(273,316,361,506,564,673,712,763,883,1216,1251,2082,2363,3096,3123,3679,3915) OR cc_adressen.id IN(977,1467,1478,1509,1522,1523,1525,1526,1527,1528,1529,1530,1531,1532,1533,1534,1535,1536,1537,1538,1539,1540,1541,1543,1544,1545,1546,1547,1548,1549,1550,1551,1552,1553,2078,2997,3001,3025,3032,3043,3049,3071,3100,3115,3246,3273,3286,3288,3293,3322,3646,3662,3675,3753,3939,3983) AND cc_adressen.published='1' ORDER BY cc_adressen.adresse_zipcode ASC LIMIT 0,20[/SIZE][/FONT][/COLOR]
                  Laut Definition ist das Ergebnis auch richtig, aber nicht in Abhängigkeit.

                  Wenn ich die Felder strikt setze mit OR als Kombinierer, habe ich das gleiche (summierte) Ergebnis bei der Abfrage beider Felder.
                  Bei der Abfrage der Einzelfelder erhalte ich nun keine Ergebnisse.

                  System-Log
                  Code:
                  [COLOR=#333333][FONT=-apple-system][SIZE=14px]SELECT cc_adressen.* FROM cc_adressen WHERE cc_adressen.id IN(977,1467,1478,1509,1522,1523,1525,1526,1527,1528,1529,1530,1531,1532,1533,1534,1535,1536,1537,1538,1539,1540,1541,1543,1544,1545,1546,1547,1548,1549,1550,1551,1552,1553,2078,2997,3001,3025,3032,3043,3049,3071,3100,3115,3246,3273,3286,3288,3293,3322,3646,3662,3675,3753,3939,3983) AND cc_adressen.published='1' AND cc_adressen.id IN(-9) ORDER BY cc_adressen.adresse_zipcode ASC[/SIZE][/FONT][/COLOR]
                  Bug, nicht möglich oder Trick notwendig?

                  Wie gesagt, es müssen beide Felder einzeln und kombiniert in Abhängigkeit zueinander abgefragt werden können.

                  Kommentar


                  • #10
                    Ich habe den Debug-Modus auch mal aktiviert: Bei mir wirft der Textfilter immer einen negativen Wert (-6) aus, wenn strikt geschaltet, egal ob der Filter benutzt wird oder nicht. Das führt dann dazu, dass ich keine Einträge angezeigt bekommen mit striktem Text-Filter.
                    So sieht es im System-Log aus, wenn ich die Seite mit dem Listen-Modul aufrufe:
                    SELECT cc_katalog.* FROM cc_katalog WHERE cc_katalog.veroeffentlichen='1' AND cc_katalog.id IN(-6) ORDER BY cc_katalog.Beschreibung

                    Kommentar


                    • #11
                      Zitat von Cti Beitrag anzeigen
                      Ich habe den Debug-Modus auch mal aktiviert: Bei mir wirft der Textfilter immer einen negativen Wert (-6) aus, wenn strikt geschaltet, egal ob der Filter benutzt wird oder nicht. Das führt dann dazu, dass ich keine Einträge angezeigt bekommen mit striktem Text-Filter.
                      So sieht es im System-Log aus, wenn ich die Seite mit dem Listen-Modul aufrufe:
                      SELECT cc_katalog.* FROM cc_katalog WHERE cc_katalog.veroeffentlichen='1' AND cc_katalog.id IN(-6) ORDER BY cc_katalog.Beschreibung
                      Das klingt richtig. Strikt und leer. Oben erklärt.
                      http://www.premium-contao-themes.com

                      Kommentar


                      • #12
                        Wie gesagt, es müssen beide Felder einzeln und kombiniert in Abhängigkeit zueinander abgefragt werden können.
                        Kannst du dein Vorhaben in verständlichen Worten ausdrücken? SQL kann ja "verständlich" wörtlich ausgedrückt werden. Wie sollte die Logik heissen?

                        Hier sind deutlich mehr Filter am werkeln als nur zwei Textfilter ggf. muss du anfangen Abfragen auszuklammern. Es ist ein unterschied ob eine Abfrage in Klammern steht oder nicht. Dafür gibt es Filter-Wrapper in CC.

                        Beispiel, der den Unterschied klarmacht (vergleichbar mit einer If-Abfrage Logik)

                        Aufgabe ist es: "Zeige alle Einträge wo text1 oder text2 einen bestimmten Wert hat und diese Einträge auch noch veroeffentlicht sind."

                        (normales Verfahren)
                        Code:
                        text1="Hallo" OR text2="Welt" AND veroeffentlicht=1
                        -> Ergebnis: entspricht: Zweige alle Einträge wo text1 Hallo ist oder text2 Welt und veröffentlichen 1 ist. Das radiert Einträge aus, wo text1 Hallo ist und veroeffentlichen 1 ist, weil text2 ggf. nicht Welt ist.

                        (geklammertes Verfahren mit Filter-Wrappern)
                        Code:
                        (text1="Hallo" OR text2="Welt") AND veroeffentlicht=1
                        Zeige alle Einträge wo text1 Hallo oder text 2 Welt ist, und (autark behandelt) veroeffentlicht 1 ist.
                        Zuletzt geändert von Tim; 26.02.2018, 12:13.
                        http://www.premium-contao-themes.com

                        Kommentar


                        • #13
                          Zitat von Tim Beitrag anzeigen

                          Das klingt richtig. Strikt und leer. Oben erklärt.
                          Vor dem Update war es möglich, folgendes Verhalten zu erzeugen:

                          Bei Aufruf der Seite mit dem Listen-Modul und dem Textfilter werden erstmal alle Einträge angezeigt - bis ich einen der Filter benutze, um die Auswahl einzugrenzen.

                          Benutze ich den Textfilter passiert entweder
                          • 1a) es gibt einen Treffer und es werden nur die entsprechenden Einträge angezeigt
                          • 1b) es gibt keinen Treffer und es wird ein Hinweis "Kein Treffer" angezeigt

                          Nach dem Update sieht es aktuell so aus:

                          I. Textfilter nicht-strikt:
                          Bei Aufruf der Seite mit dem Listen-Modul und dem Textfilter verhält es sich erstmal wie vor dem Update, also alle Einträge werden angezeigt.

                          Benutze ich den Textfilter passiert entweder
                          • 2a) es gibt einen Treffer und es werden nur die entsprechenden Einträge angezeigt - wie vor dem Update
                          • 2b) es gibt keinen Treffer und es werden ALLE Einträge angezeigt (weil der Filter ignoriert wird)

                          II. Textfilter strikt:
                          Bei Aufruf der Seite mit dem Listen-Modul und dem Textfilter werden erstmal KEINE Einträge angezeigt, sondern direkt der Hinweis "Kein Treffer".
                          Benutze ich nun den Textfilter ändert sich nichts. Es werden immer KEINE Einträge angezeigt, nur der Hinweis "Kein Treffer".

                          Gibt es noch die Möglichkeit, ein Verhalten wie bei 1b zu erzeugen?

                          Kommentar


                          • #14
                            Zitat von Tim Beitrag anzeigen
                            Hier sind deutlich mehr Filter am werkeln als nur zwei Textfilter ggf. muss du anfangen Abfragen auszuklammern.
                            Also wenn hier mehrere Filter am Werkeln sind, würde ich gern wissen, wo die herkommen. Anbei ein Screen des Filtersets. Im Filtermodul ist nichts weiter eingetragen und in der Liste nur eine Eigene Sortierung angelegt.

                            Klicke auf die Grafik für eine vergrößerte Ansicht

Name: Bildschirmfoto 2018-02-26 um 14.23.09.png
Ansichten: 70
Größe: 27,1 KB
ID: 10625

                            Bzgl. SQL-logisch ausdrücken, habe ich es etwas schwer. Schau mal bitte auf das Abfrage-Formular im 2. Screen.

                            Klicke auf die Grafik für eine vergrößerte Ansicht

Name: Bildschirmfoto 2018-02-26 um 14.23.31.png
Ansichten: 69
Größe: 25,4 KB
ID: 10626

                            Fall 1: Nur Feld Nachname ausgefüllt: Zeige alle Einträge aus der DB, die diesem Wert entsprechen
                            Fall 2: Nur Feld Ort ausgefüllt: Zeige alle Einträge aus der DB, die diesem Wert entsprechen
                            Fall 3: Nachname UND Ort ausgefüllt: Zeige alle Einträge, die NUR dieser Kombination entsprechen.

                            Verständlich genug oder noch unklar?

                            Kommentar


                            • #15
                              Fall 1: Nur Feld Nachname ausgefüllt: Zeige alle Einträge aus der DB, die diesem Wert entsprechen
                              Fall 2: Nur Feld Ort ausgefüllt: Zeige alle Einträge aus der DB, die diesem Wert entsprechen
                              Fall 3: Nachname UND Ort ausgefüllt: Zeige alle Einträge, die NUR dieser Kombination entsprechen.

                              Die Art benötigt keine Kombinierer und CC sollte über die Systemeinstellungen nicht strikt fahren. Das ist quasi Standard. Leere Filter werden übergangen, wenn diese nicht strikt sind.
                              http://www.premium-contao-themes.com

                              Kommentar

                              Lädt...
                              X