mysql pattern matching
Rob_2
- datenbank
0 Vinzenz Mai0 Rob_2
Hallo zusammen,
ich hab folgende mysql Tabellen.
Tabelle "Data"
data_id;name;
1;neu_abc;
2;neu_123;
3;test_assdg;
Tabelle "Pattern"
pat_id;pattern;
1;test_;
2;neu_;
Nun möchte ich diese 2 Tabellen anhand der Pattern joinen.
Ergebnis wäre also:
data_id;name;pat_id;pattern
1;neu_abc;2;neu_;
2;neu_123;2;neu_;
3;test_assdg;1;test_;
Von der Logik also sowas wie:
SELECT * FROM data,pattern WHERE name.data REGEXP '^<Feld pattern>';
Wie sieht dafür die Syntax aus? Ich finds nicht :(
Danke.
Grüsse
Rob
Hallo,
Deine Schreibweise der Tabellen ist nicht gerade übersichtlich
Tabelle "Data"
data_id;name;
1;neu_abc;
2;neu_123;
3;test_assdg;
Tabelle "Pattern"
pat_id;pattern;
1;test_;
2;neu_;
Nun möchte ich diese 2 Tabellen anhand der Pattern joinen.
data_id;name;pat_id;pattern
1;neu_abc;2;neu_;
2;neu_123;2;neu_;
3;test_assdg;1;test_;
data_id | name | pat_id | pattern
--------+------------+--------+---------
1 | neu_abc | 2 | neu_
2 | neu_123 | 2 | neu_
3 | test_assdg | 1 | test_;
wäre leichter lesbar und weniger fehleranfällig. Ich hatte zunächst die Spalte pat_id völlig übersehen ...
Wie sieht dafür die Syntax aus? Ich finds nicht :(
mir ist nicht ganz klar, ob der Inhalt von pattern in name vorkommen soll, ober ob name mit pattern beginnen soll. In beiden Fällen nutzte ich jedoch die Funktion LOCATE(), die mir die Position des ersten Vorkommens eines Teilstrings in einer anderen Zeichenkette angibt.
Je nach Anforderung prüfst Du auf
= 1 -- wenn name mit pattern beginnen muss
> 0 -- wenn name pattern enthalten soll
Hier am Beispiel "name enthält pattern" mit hübscher expliziter Join-Syntax:
SELECT -- Gib mir
d.data_id, -- die gewünschten Spalten
d.name,
p.pat_id,
p.pattern
FROM -- aus der Tabelle
Data d -- Data (über den Alias d angesprochen),
INNER JOIN -- die mit der Tabelle
Pattern p -- Pattern (mit Aliasnamen p)
ON -- über die Bedingung,
[link:http://dev.mysql.com/doc/refman/5.1/en/string-functions.html#function_locate@title=LOCATE](p.pattern, d.name) > 0
-- dass pattern (aus p) in name (aus d) enthalten ist, verknüpft ist.
Freundliche Grüße
Vinzenz
Hier am Beispiel "name enthält pattern" mit hübscher expliziter Join-Syntax:
SELECT -- Gib mir
d.data_id, -- die gewünschten Spalten
d.name,
p.pat_id,
p.pattern
FROM -- aus der Tabelle
Data d -- Data (über den Alias d angesprochen),
INNER JOIN -- die mit der Tabelle
Pattern p -- Pattern (mit Aliasnamen p)
ON -- über die Bedingung,
[link:http://dev.mysql.com/doc/refman/5.1/en/string-functions.html#function_locate@title=LOCATE](p.pattern, d.name) > 0
-- dass pattern (aus p) in name (aus d) enthalten ist, verknüpft ist.
Danke, sieht gut aus!