SELECT...LIKE...umgedreht
Juliane
- datenbank
Hi!
Mit
SELECT * FROM tabelle WHERE variable1 LIKE '%abc%'
finde ich ja bekanntlich alle Einträge, deren Variable1 "abc" irgendwie enthält.
Wenn ein Tabelleneintrag also die Variable "abcde" hat, wird sie hier angezeigt.
Wie ist es aber, wenn die Variable in der Tabelle den Wert "abc" hat und mein Suchwort den Wert "abcde"?
Meine Idee war
SELECT * FROM tabelle WHERE '%variable1%' LIKE 'abcde'
aber natürlich klappt das nicht.
Wer weiß eine Lösung?
Hi,
Mit
SELECT * FROM tabelle WHERE variable1 LIKE '%abc%'
finde ich ja bekanntlich alle Einträge, deren Variable1 "abc" irgendwie enthält.Wenn ein Tabelleneintrag also die Variable "abcde" hat, wird sie hier angezeigt.
Hoer bitte mal auf, von "Variablen in der Tabelle" zu reden, und nenne sie Spalten, wie das ueblich ist - dann wird vielleicht besser verstaendlich, was du eigentlich meinst.
Wie ist es aber, wenn die Variable in der Tabelle den Wert "abc" hat und mein Suchwort den Wert "abcde"?
Du meinst, du willst einen Datensatz finden, der in einer Spalte den Wert "abc" enthaelt, wenn du nach "abcde" gesucht hast?
Das ist auf trivialem Wege nicht moeglich.
Meine Idee war
SELECT * FROM tabelle WHERE '%variable1%' LIKE 'abcde'
aber natürlich klappt das nicht.
Nein, das ist ungueltige Syntax.
Wer weiß eine Lösung?
Vielleicht finden wir eine, wenn wir erst mal (genau) wissen, was dein Problem ist. Derzeit bin ich mir da nicht sicher.
MfG ChrisB
Ja, das Problem ist genauso wie du sagst.
Ich will, dass wenn ich nach abcde suche auch abc gefunden wird, aber nicht abch! :-)
Hi,
SELECT * FROM tabelle WHERE variable1 LIKE '%abc%'
dieses Statement enthält zwei Faktoren, die in einem kompetenten Software-Unternehmen als live-kritischer Bug kategorisiert werden würden.
Hoer bitte mal auf, von "Variablen in der Tabelle" zu reden, und nenne sie Spalten, wie das ueblich ist - dann wird vielleicht besser verstaendlich, was du eigentlich meinst.
Dieser Bitte schließe ich mich an.
Du meinst, du willst einen Datensatz finden, der in einer Spalte den Wert "abc" enthaelt, wenn du nach "abcde" gesucht hast?
Das ist auf trivialem Wege nicht moeglich.
Doch, unter Beibehaltung eines der o.g. live-kritischen Bugs.
SELECT * FROM tabelle WHERE '%variable1%' LIKE 'abcde'
Nein, das ist ungueltige Syntax.
Die Syntax ist gültig - ein ordentliches DBMS interessiert sich nicht dafür, ob man nun eine Spalte überprüft, einen String oder irgend etwas anderes, das in dem Kontext vergleichbar ist. Hier wird allerdings die Zeichenkette '%'+'v'+'a'+...+'%' auf Identität(!) mit der Zeichenkette 'abcde' überprüft.
Cheatah
Hallo Juliane,
Wie ist es aber, wenn die Variable in der Tabelle den Wert "abc" hat und mein Suchwort den Wert "abcde"?
Wer weiß eine Lösung?
Das hängt davon ab, welche Funktionalität Dir Dein Datenbankmanagmenetsystem, dessen Namen und Version Du uns freundlicherweise verschweigst, zur Verfügung stellt. MySQL z.B. kennt die Funktion INSTR(), mit der Du Dein Ziel erreichen kannst, wenn Du MySQL verwendest.
Freundliche Grüße
Vinzenz
echo $begrüßung;
SELECT * FROM tabelle WHERE variable1 LIKE '%abc%'
vs.
SELECT * FROM tabelle WHERE '%variable1%' LIKE 'abcde'
Generell steht der Ausdruck mit dem/den Jokerzeichen bei LIKE auf der rechten Seite. Das muss kein fester String sein. Er kann auch zusammengesetzt werden, beispielsweise aus Jokerzeichen + Feldinhalt + Jokerzeichen. Zum Zusammensetzen von Strings nimmt man üblicherweise die CONCAT()-Funktion. Ebenso kann auf der linken Seite ein fester String statt eines Feldnamens stehen.
echo "$verabschiedung $name";
[...] Meine Idee war
SELECT * FROM tabelle WHERE '%variable1%' LIKE 'abcde'
aber natürlich klappt das nicht. [...]
Vielleicht suchst Du etwas wie
SELECT * FROM tabelle WHERE 'abcde' LIKE '%' || variable1 || '%';
Allerdings ist diese Abfrage vermutlich ziemlich ineffizient, weil die Datenbank dafür wohl kaum einen Index verwenden kann, sondern die komplette Tabelle scannen muss.