Hallo,
meine MySQL-Kentnisse sind noch sehr jung und lückenhaft,
das stimmt :-)
aber könnte es sein, dass diese Bedingung von Dir missverstanden wird?
WHERE ("txt_opener" LIKE "%gg%" AND "%jj%")
das stimmt ebenfalls,
Dein Statement (ja, dieser Ausschnitt) bedeutet nach meinem Verständnis
'Datensätze für die gilt, dass "txt_opener" (ein String, keinesfalls ein Spaltenname!)
das stimmt nicht (nicht immer),
ähnlich zu "%gg%" ist (es muss "gg" darin enthalten sein)
das kann stimmen oder auch nicht: es könnte auch bedeuten: Der Inhalt der Spalte txt_opener muss ähnlich zum Inhalt der Spalte %gg% sein.
und es muss "%jj%" auch noch erfüllt sein (was auch immer das sein soll).'
Entweder die Zeichenkette %jj% wird in einem boolschen Kontext ausgewertet und ist somit wahr oder es wird der Inhalt der Spalte %jj% ausgewertet, der wahr oder falsch sein kann. Vermutlich wird's die Spalten nicht geben und zu einer Fehlermeldung kommen ...
Ich hätte jetzt zuersteinmal die Spaltennamen in Backticks eingeschlossen (z.B.
txt\_opener
anstatt "txt_opener") und die AND-Verknüpfung hätte ich nicht nur mit einem String, sondern mit einem echten zweiten Ausdruck mit LIKE-Operator versehen:
Backtickitis ist eine üble MySQL-Krankheit :-(
Man kann sie mit dem SQL-Modus ANSI_QUOTES heilen :-)
Auch für Dich, Felix:
Es ist eine gute Idee, in SQL Zeichenketten *ausschließlich* in einfache Anführungszeichen einzuschließen.
In Beispielcode ist es eine sehr gute Idee, solche Spaltennamen zu verwenden, die nicht gequoted werden müssen - und sie auch nicht zu quoten.
Bei generiertem Code ist es dagegen eine gute Idee, Schema Object Names grundsätzlich zu quoten - und dies einer Funktion zu überlassen, die dies für das verwendete DBMS richtig macht.
Freundliche Grüße
Vinzenz