openjverein / jverein

Open JVerein - Open Source Vereinsverwaltung
https://openjverein.github.io
GNU General Public License v3.0
42 stars 15 forks source link

Filter für Lehrgänge View Update #233

Closed JohannMaierhofer closed 2 months ago

JohannMaierhofer commented 3 months ago

Das Feature fügt im Filterbereich im Lehrgänge View ein Suchfeld für den Namen ein und fügt den Filter-Reset Button dazu. Als weiteres ist der Filter auf die Benutzung des neuen FilterControl umgestellt. View Filter alt: Screenshot_20240603_110830

View Filter neu: Screenshot_20240603_110150

JohannMaierhofer commented 2 months ago

Ok, ich werde das ändern, auch bei den anderen Pull Requests. Ich hätte aber noch eine Frage an dich, das ist nämlich der Grund warum ich irgendwie vom DBIterator abgekommen bin. Man kann doch beim DBIterator wie du schreibst Filter hinzufügen. Bei einem der Requests hier hatte ich das gemacht und dann beim Testen seltsame Ergebnisse bekommen die ich mir nicht erklären konnte. Nach längerer Überlegung hat es so ausgeschaut als ob die Filter verodert sind und nicht verundet. Kann das sein?

willuhn commented 2 months ago

Nach längerer Überlegung hat es so ausgeschaut als ob die Filter verodert sind und nicht verundet. Kann das sein?

Wenn du Filter per "addFilter()" hinzufügst, wird generell "AND" verwendet. "OR" ist gar nicht ohne weiteres möglich. Das kann man höchstens mit Klammern erreichen. Etwa so:

addFilter("spalte1 = 1 OR spalte2 = 2")

Hier hat man aber das Risiko, dass dann - falls davor noch weitere Filter hinzugefügt wurden, sich die ganze Query-Logik ändert. Beispiel:

addFilter("spalte1=1")
addFilter("spalte2=2 OR spalte3=3")
addFilter("spalte4=4")

Das erzeugt am Ende:

SELECT ... WHERE spalte1=1 AND spalte2=2 OR spalte3=3 AND spalte4=4

Das OR wirkt sich dann auch auf spalte1 und spalte4 mit aus. Wenn du so einen Fall hast, schreibe besser

addFilter("spalte1=1")
addFilter("(spalte2=2 OR spalte3=3)")
addFilter("spalte4=4")

Das erzeugt am Ende:

SELECT ... WHERE spalte1=1 AND (spalte2=2 OR spalte3=3) AND spalte4=4
JohannMaierhofer commented 2 months ago

Ja, das könnte es gewesen sein.