Also ich hab das jetzt aufgegeben. Auch mit mehreren Filtersets wurde das nicht besser. Mit 2 Oder Bedingungen klappte es noch aber mit 3 war wieder Chaos. .. und es sollen später evtl. mal 6 werden... Ich habe den Filter jetzt selbst gebaut und damit geht es dann erstmal.
Danke auf jeden Fall für Deine Hinweise zur Lösung!!
Ankündigung
Einklappen
Keine Ankündigung bisher.
CC Filter um mehrere Attribute abzufragen?
Einklappen
X
-
Puhhh... das kann ich auch nicht einfach so ausm Stehgreif. Ich glaube es ist auch besser mehrere Filtersets zu nutzen. Filtersets untereinander werden mit AND verbunden.
Einen Kommentar schreiben:
-
Hm, irgendwie zu früh gefreut Das mit der Sprache und der Vermeidung der doppelten läuft jetzt prima. Aber die ODER Auswahl funktioniert (bei mir leider noch nicht richt
Die verwendete Filtersammlung ist so auf gebaut:
Wäre das korrekt oder liegt da schon der Wurm?
Im Code sieht eine "Leerabfrage" , an den kritischen Stellen mit der ODER Verknüpfung so aus:
PHP-Code:...?language=de&textsuche=&test_standard_1=&test_standard_2=
Im Feld A (test_standard_1) sind die Tags 13, 14, 15, 16 und 40 vorhanden. Im Feld B (test_standard_2) sind die Tags 13, 14 und 15 vorhanden.
Suche ich jetzt nach 13 (PHP-Code:...?language=de&textsuche=&test_standard_1=13&test_standard_2=13
HTML-Code:[2022-11-25T16:49:41.922383+01:00] request.CRITICAL: Uncaught PHP Exception Doctrine\DBAL\Exception\SyntaxErrorException: "An exception occurred while executing a query: SQLSTATE[42000]: Syntax error or access violation: 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 'cc_productcatalog.id IN(1,2,3,29,31,34,36,39,43,46,47,49,50,51,60,62,65,67,6...' at line 1" at /var/www/vhosts/example.com/update.example.com/vendor/doctrine/dbal/src/Driver/API/MySQL/ExceptionConverter.php line 86 {"exception":"[object] (Doctrine\\DBAL\\Exception\\SyntaxErrorException(code: 1064): An exception occurred while executing a query: SQLSTATE[42000]: Syntax error or access violation: 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 'cc_productcatalog.id IN(1,2,3,29,31,34,36,39,43,46,47,49,50,51,60,62,65,67,6...' at line 1 at /var/www/vhosts/example.com/update.example.com/vendor/doctrine/dbal/src/Driver/API/MySQL/ExceptionConverter.php:86)\n[previous exception] [object] (Doctrine\\DBAL\\Driver\\PDO\\Exception(code: 1064): SQLSTATE[42000]: Syntax error or access violation: 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 'cc_productcatalog.id IN(1,2,3,29,31,34,36,39,43,46,47,49,50,51,60,62,65,67,6...' at line 1 at /var/www/vhosts/example.com/update.example.com/vendor/doctrine/dbal/src/Driver/PDO/Exception.php:28)\n[previous exception] [object] (PDOException(code: 42000): SQLSTATE[42000]: Syntax error or access violation: 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 'cc_productcatalog.id IN(1,2,3,29,31,34,36,39,43,46,47,49,50,51,60,62,65,67,6...' at line 1 at /var/www/vhosts/example.com/update.example.com/vendor/doctrine/dbal/src/Driver/PDO/Connection.php:69)"} []
Ändere ich die Abfrage auf eine Suche nach Datensätzen die das Tag ID 16 in entweder dem einen oder anderen Feld haben, kommt kein Fehler und es werden mir aber alle Datensätze angezeigt (wohl weil es beim Feld test_standard_2 keine Treffer gibt)
Ich habe mittlerweile einen Knoten im Kopf und hoffe Du kannst mir meinen Fehler aufzeigen?
Einen Kommentar schreiben:
-
Ah, oke, verstehe, dafür sind die Dingers da und dazu braucht man da die Sprachfilter - Wir brauchen echt mal ein gescheites Wiki ;-)
Danke für die Skizze und Aufklärung - Damit hat es dann natürlich geklappt ;-) Merci!
Einen Kommentar schreiben:
-
Nope das ist richtig. Deine Liste wird jetzt halt lose. Die ersten IDs sind die Spracheinträge, jetzt wird mit OR die Ids der Tags-Filter angebackt.
Das musst geklammert werden. Logik: SPRACH-IDS AND ( tags1 OR tags2 OR tags3 )
Dafür gibts die Filter "Teilbereich Start/Stop". Du musst die Tags Filter damit umwrappen.
- 1 Likes
Einen Kommentar schreiben:
-
Also, ich habe mir die ausgegebenen IDs jetzt mal genauer angeschaut und die doppelten kommen von der anderen Sprachversion. Es sieht aus, als würde bei der Konstruktion die Sprachfilterung nicht mehr funktionieren?
Im Filter- und Listermodul ist der Filter für die aktive Sprache gesetzt. Aber es scheint nicht zu funktionieren. Wenn ich mir das SQL Query anschauen, was bei der Erzeugung der Listeneinträge verwendet wird, dann hätte ich da jetzt auch einen Join mit der Language Tabelle erwartet?
HTML-Code:[2022-11-25T10:37:13.568223+01:00] contao.INFO: SELECT cc_productcatalog.* FROM cc_productcatalog WHERE cc_productcatalog.id IN(396,395,339,432,433,337,431,336,430,333,429,332,428,331,427,327,426,326,425,323,424,322,319,423,318,422,315,421,312,420,295,294,293,292,259,258,257,256,255,254,222,481,219,217,67,29,472) OR cc_productcatalog.id IN(219,217,111,63,62) OR cc_productcatalog.id IN(1,2,3,29,31,34,36,39,43,46,47,49,50,51,60,62,65,67,69,70,71,72,73,74,81,84,85,94,95,96,101,106,108,110,114,116,119,121,123,125,127,129,131,133,135,137,139,146,161,163,165,168,170,188,190,192,194,203,197,199,201,205,207,209,211,213,215,217,220,222,225,227,228,231,233,236,239,241,244,247,250,252,254,256,259,261,262,263,272,292,295,296,299,301,305,306,309,312,315,318,319,322,323,326,327,331,332,333,336,337,339,342,345,347,348,351,352,355,356,363,361,366,367,370,372,374,376,379,381,382,385,386,391,392,396,397,404,407,176,178,180,277,280,282,284,287,288,291,17,18,19,20,22,25,149,151,153,155,157,159,172,89,92,184,186) AND cc_productcatalog.publish='1' ORDER BY cc_productcatalog.cert_date DESC LIMIT 0,50 []
Einen Kommentar schreiben:
-
Zitat von Brubbel Beitrag anzeigen
Danke erstmal. Ich muss mir das nachher noch mal anschauen ob das unterschiedliche IDs sind oder wieso die doppelt kommen.
Du kannst in den Systemeinstellungen > CC auch den Debug-Modus aktivieren. Dann wird jede SQL Bedingung in den Systemlog geschrieben. Auch das hilft immens beim Aufbau von speziellen Filter-Aufgaben
Einen Kommentar schreiben:
-
Zitat von Tim Beitrag anzeigenDie Listen-Ansicht wird anhand der IDs gebildet. Doppelte Ids erzeugen keine doppelten Einträge.
Einen Kommentar schreiben:
-
Die Listen-Ansicht wird anhand der IDs gebildet. Doppelte Ids erzeugen keine doppelten Einträge.
DISTINCT ist noch anders! Ids sind nie DISTINCT sondern das exakte Gegenteil. UNIQUE quasi.
DESTINCT gibt Überschneidungen / Dopplungen aus.
Eigene SQL Bedingung:
id=1 OR id=1 OR id=1
Gibt nur einen Eintrag aus.Zuletzt geändert von Tim; 25.11.2022, 08:01.
Einen Kommentar schreiben:
-
Ja, ich erwarte (und bin hocherfreut), dass Datensatz 1 doppelt gefunden wird . Mir geht es um die Ausgabe der Treffer. Ich habe in der Listenansicht den einen Artikel ja nun doppelt. Was unerwünscht ist. Ich hätte "erwartet"/"erhofft", dass sich die Ausgabe automatisch wie bei SQL DISTINCT verhält.
Muss ich das noch irgendwie sagen oder "ist das so" und ich muss schauen wie ich die Redundanz im (Lister-)Template selbst rausfiltere?
Einen Kommentar schreiben:
-
Den letzten Satz verstehe ich nicht. Das führt doch dann zum Ausgangsproblem oder?
---
Datensatz 1 muss doppelt gefunden werden. Das ist korrekt. Apfel kommt in beiden vor. Ich verstehe nicht genau was dein gewünschtes Ergebnis wäre.
Einen Kommentar schreiben:
-
Den letzten Satz verstehe ich nicht. Das führt doch dann zum Ausgangsproblem oder?. Im Grunde ist das so:
Datensatz 1 hat in
Feld A Apfel
Feld B Mango
Feld C Apfel
Datensatz 2 hat
Feld A Apfel
Feld B Pflaume
Feld C Holunder
Datensatz 3 hat
Feld A Birne
Feld B Mango
Feld C Zirbe
Wenn ich jetzt (Ohne Abfragekombinierer) eine Suche mit folgenden Parametern losschicke, erhalte ich 0 Datensätze
HTML-Code:....?language=de&feld_a=Apfel&feld_b=Apfel&feld_c=Apfel
Mache ich noch was falsch oder ist das normal und ich muss im Template die Datensätze vor der Ausgabe selbst noch mal reduzieren?
Einen Kommentar schreiben:
-
Zitat von Brubbel Beitrag anzeigenOke, danke, den habe ich gefunden und ausprobiert. Im Ergebnis erhalte ich nun viele Einträge doppelt, bzw. dreifach. Wohl daher, weil einige Begriffe sowohl in Feld A als auch Feld B oder Feld C vorkommen. Wie kann ich die Ausgabe wieder so eindampfen, dass nur eindeutige Datensätze ausgeworfen werden?
Einen Kommentar schreiben:
-
Oke, danke, den habe ich gefunden und ausprobiert. Im Ergebnis erhalte ich nun viele Einträge doppelt, bzw. dreifach. Wohl daher, weil einige Begriffe sowohl in Feld A als auch Feld B oder Feld C vorkommen. Wie kann ich die Ausgabe wieder so eindampfen, dass nur eindeutige Datensätze ausgeworfen werden?
Einen Kommentar schreiben:
-
Zitat von Brubbel Beitrag anzeigenHmm, leider habe ich doch noch eine Frage ... Wie kann ich denn erreichen, dass die Abfrage auf die 3 Felder als ODER Frage angesehen wird? Hatte ich komischerweise irgendwie noch nie ... Danke!
Einen Kommentar schreiben:
Einen Kommentar schreiben: