Hallo Leute,
ich möchte eine Filter-Abrage erstellen und habe ein kleines Problem mit dem SQL Code
[bb]
WHERE ( LOWER ( "Vorname" ) LIKE ( :qVorname || ' % ') OR :qVorname IS NULL )
[/bb]
das filtern sollte möglichst nach Buchstaben möglich sein. Wenn ich || ' % ' entferne funktioniert die Abrage. Ich benutze MariaDB als Datenbank allerdings klappt es auch nicht mit der Base Datenbank. Was mache ich falsch?
Gruss
rammy
SQL Abfrage mit Parameter Problem
Moderator: Moderatoren
Re: SQL Abfrage mit Parameter Problem
Hallo rammy,
MySQL und MariaDB kennen die Art der Verbindung nicht, die Du nutzt.
müsste dort funktionieren.
Das setzt natürlich voraus, dass Du die Anfangsbuchstaben beim Suchen immer klein eingibst.
Gruß
Robert
MySQL und MariaDB kennen die Art der Verbindung nicht, die Du nutzt.
Code: Alles auswählen
WHERE ( LOWER ( "Vorname" ) LIKE CONCAT( :qVorname, ' % ') OR :qVorname IS NULL )
Das setzt natürlich voraus, dass Du die Anfangsbuchstaben beim Suchen immer klein eingibst.
Gruß
Robert
Re: SQL Abfrage mit Parameter Problem
Wenn das nicht funktioniert, dann liegt es am Treiber und an der Parameterabfrage.
Ich habe das gerade mit einer MariaDB probiert:
Direkter Treiber von LibreOffice funktioniert zusammen mit dem Parameter nicht. Wenn ich aber einen festen Anfangsbuchstaben statt des Parameters da rein schreibe und außerdem natürlich die überflüssigen Leerzeichen um das Prozentzeichen herum raus nehme, dann funktioniert die Abfrage. Die überflüssigen Leerzeichen hatten sich Du eine Kopie der Abfrage im Ursprungspost ergeben:
Sobald ich da einen Parameter einsetze ist es vorbei. Und das liegt daran, dass LibreOffice noch den Eintrag
in der content.xml hat. Nachdem ich den gelöscht habe tat es auch diese Abfrage.
Da der Kontakt zur MariaDB/MySQL aber sowieso über JDBC besser klappt habe ich auch das getestet:
und das funktioniert dann dort. Ebenso wie
Ich würde also an Deiner Stelle hier einmal posten, mit welcher Kombination Du das Ganze denn im Moment versuchst.
Ich habe das gerade mit einer MariaDB probiert:
Direkter Treiber von LibreOffice funktioniert zusammen mit dem Parameter nicht. Wenn ich aber einen festen Anfangsbuchstaben statt des Parameters da rein schreibe und außerdem natürlich die überflüssigen Leerzeichen um das Prozentzeichen herum raus nehme, dann funktioniert die Abfrage. Die überflüssigen Leerzeichen hatten sich Du eine Kopie der Abfrage im Ursprungspost ergeben:
Code: Alles auswählen
... WHERE ( LOWER ( "Vorname" ) LIKE CONCAT( 'r', '%'))
Code: Alles auswählen
db:parameter-name-substitution="false"
Da der Kontakt zur MariaDB/MySQL aber sowieso über JDBC besser klappt habe ich auch das getestet:
Code: Alles auswählen
... WHERE LOWER ( `Vorname` ) LIKE CONCAT( :qVorname, '%' )
Code: Alles auswählen
... WHERE (LOWER ( `Vorname` ) LIKE CONCAT( :qVorname, '%' ) OR :qVorname IS NULL)
Re: SQL Abfrage mit Parameter Problem
Hallo Robert,
keiner der Abfragen hat bei der direkten Verbindung zur Datenbank funktioniert. Also habe ich die Verbindung auf JDBC umgestellt und siehe da viel weniger Probleme.
Bei Deiner Abfrage :
wurde nur das erste Zeichen vom String berücksichtigt. Also habe ich es etwas angepasst:
so wird jedes Zeichen im String auf die Eingabe hin geprüft. Wobei es egal ist ob man Klein oder Groß schreibt...zumindest auf meinem System.
Vielen Dank Robert für Deine Hilfe.
Gruß rammy
keiner der Abfragen hat bei der direkten Verbindung zur Datenbank funktioniert. Also habe ich die Verbindung auf JDBC umgestellt und siehe da viel weniger Probleme.
Bei Deiner Abfrage :
Code: Alles auswählen
WHERE (LOWER ( `Vorname` ) LIKE CONCAT( :qVorname, '%' ) OR :qVorname IS NULL)
Code: Alles auswählen
WHERE ( LOWER ( "Nachname" ) LIKE CONCAT( '%', :qNachname, '%' ) OR :qNachname IS NULL ) AND ( LOWER ( "Vorname" ) LIKE CONCAT( '%', :qVorname, '%' ) OR :qVorname IS NULL )
Vielen Dank Robert für Deine Hilfe.
Gruß rammy