MySQL: Platzhalter ablegen

versuch13

Erfahrenes Mitglied
Hallo. Ich möchte gerne Platzhalter in den Zellen speichern um anschließend Vergleiche durchführen zu können. (MySQL5)

Also z.B. hat die Spalte den Inhalt

"foo/%"

nun soll mit dem String "foo/bar" von außen verglichen werden und das sollte einen Treffer ergeben.

Funktioniert soweit auch mit:

Code:
SELECT `foo` FROM `table` WHERE "foo/bar" LIKE `foo`

Allerdings möchte ich auch variable Teile mitten im String haben, also z.B.:

foo/%/bar

bei

foo/boo/bar

gefunden werden. Kann ich dass irgendwie per REGEXP machen? Ist es überhaupt so möglich wie ich es mir vorstelle?

Danke.
 
Hallo,

heißt deine Spalte denn "foo/bar"

es gibt 2 Operatoren die Du dafür verwenden kannst.

SQL:
-- Finde alle Einträge in denen "foo" an belibieger Stelle vorkommt
select  * from deine_tabelle where column like '%foo%'
-- Finde einträge in denen foo und bar vorkommt
select  * from deine_tabelle
where column like '%foo%'
or column like '%bar%'
-- Mit dem Zeichen "_" begrenzt du die anzahl der zeichen, oder kannst
-- genau bestimmen wo Du den pattern finden möchtest.
select * from deine_tabell
where column like '_2____foo' -- 2 muß an 2ter stelle stehen und foo ab stelle 7
Wenn Du die Zeichen '%', "'" finden möchtest mußt du sie mit einem escape zeichen versehen, ich glaube das ist dann der "\" bei Mysql
Hilft Dir das ?

Grüße
 
Zuletzt bearbeitet von einem Moderator:
heißt deine Spalte denn "foo/bar"

Hey, nein im Beispiel trägt die Spalte den Namen `foo`.


sql Code:
-- Finde alle Einträge in denen "foo" an belibieger Stelle vorkommt

SELECT * FROM deine_tabelle WHERE COLUMN LIKE '%foo%'

-- Finde einträge in denen foo und bar vorkommt

SELECT * FROM deine_tabelle

WHERE COLUMN LIKE '%foo%'

OR COLUMN LIKE '%bar%'

-- Mit dem Zeichen "_" begrenzt du die anzahl der zeichen, oder kannst

-- genau bestimmen wo Du den pattern finden möchtest.

SELECT * FROM deine_tabell

WHERE COLUMN LIKE '_2____foo' -- 2 muß an 2ter stelle stehen und foo ab stelle 7



Wenn Du die Zeichen '%', "'" finden möchtest mußt du sie mit einem escape zeichen versehen, ich glaube das ist dann der "\" bei Mysql
Hilft Dir das ?

Nein leider nicht, wie gesagt geht es mir um den umgekehrten Weg. Trotzdem danke.
 
Versteh ich das jetzt richtig?

Deine Spalte heisst "foo", der String heisst "foo/bar".

Dann wäre eine mögliche Abfrage:

Code:
SELECT foo FROM table WHERE foo LIKE 'foo/%'   OR
foo LIKE '%/bar'

Mit REGEXP habe ich keine Erfahrungen.

Grüsse, Tecla
 
Nein, ich habe von außen den String "foo/bar" und die Spalte heißt `foo` und hat den Inhalt "foo/%", ich zitiere einfach nochmal meinen ersten Beitrag.

Hallo. Ich möchte gerne Platzhalter in den Zellen speichern um anschließend Vergleiche durchführen zu können. (MySQL5)

Also z.B. hat die Spalte den Inhalt

"foo/%"

nun soll mit dem String "foo/bar" von außen verglichen werden und das sollte einen Treffer ergeben.

Funktioniert soweit auch mit:

Code:
SELECT `foo` FROM `table` WHERE "foo/bar" LIKE `foo`
Allerdings möchte ich auch variable Teile mitten im String haben, also z.B.:

foo/%/bar

bei

foo/boo/bar

gefunden werden. Kann ich dass irgendwie per REGEXP machen? Ist es überhaupt so möglich wie ich es mir vorstelle?

Danke.

Hm, ist nicht verständlich was ich meine?

Trotzdem vielen Dank auch an dich. :)
 
Hi,

dann evtl. so:

SQL:
-- test tabelle
create table t_foo_test (
foo varchar(20)
)
-- insert testdaten
insert into t_foo_test values ('foo/bar')
insert into t_foo_test values ('bar/nicht/foo')
insert into t_foo_test values ('bar/foo/boo')
-- run for all
select * from t_foo_test
-- run for detection
select foo from t_foo_test
where INSTR(foo,'foo')

Hilft das ?

Grüße
 
Zuletzt bearbeitet von einem Moderator:

Hi. Nein leider nicht. Ist mein Beispiel so schlecht verständlich? :confused:

Ich möchte einen Platzhalter in der Spalte ablegen. Also zum Beispiel:

"foo/%/bar" % => Platzhalter

Nun möchte ich mit einem String (der von außen kommt und feststeht es handelt sich um elemente einer url) die Inhalte vergleichen.
Der String könnte jetzt zum Beispiel so aussehen: "foo/xyz/bar" (sollte einen Treffer ergeben)
 
Hi,

also in der spalte füge ich diesen String ein:
SQL:
insert into t_foo_test values ('foo/%/bar')

und jetzt suche mit RegularExpressions:

SQL:
SELECT * 
from t_foo_test 
where foo REGEXP 'foo|blub|apa' ;

Das sind die Ergebnisse:
foo
foo/bar
bar/nicht/foo
bar/foo/boo
foo/%/bar

Das sollte es sein, oder ? ;-)

http://dev.mysql.com/doc/refman/5.0/en/regexp.html
 
Zuletzt bearbeitet von einem Moderator:
Zurück