Feststellen ob Spalteninhalt in String vorkommt
ThomasP
- datenbank
0 Texter mit x0 suit
0 ThomasP
Hallo!
Ich würde gerne eine SQL-Abfrage erstellen mit der ich feststellen kann ob ein String in einem anderen vorkommt.
Also in etwa soetwas:
SELECT id, name FROM user WHERE address LIKE '%vienna%';
Problem dabei ist jetzt, daß ich das genau umgekehrt brauche und bisher nichts finden konnte wie man das lösen kann.
SELECT id, name FROM user WHERE 'Alserstrasse 74;1130 Vienna;Austria' LIKE town;
Also ich möchte alle User herausbekommen die in einer Stadt leben, deren Name irgendwie in der angegebenen Adresse vorkommt. Mag jetzt wie Unsinn aussehen, ist auch nur ein Beispiel zur Veranschaulichung. Tatsächlich benötige ich das für eine Geräteerkennung für Handydownloads. Ich muß einen gegebenen UserAgent-String nach bekannten Gerätenamen durchsuchen.
Sieht dann so aus:
SELECT devicename FROM devicelist WHERE 'SonyEricssonV630iv/R1CE Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1 UP.Link/6.3.0.0.0' LIKE devicekey1;
Es gibt dann noch eine devicekey2, der ebenfalls im useragent-String vorkommen sollte, aber möglichst nach dem vorkommen des ersten Devicekeys. Keine Ahnung, ob SQL sowas kann. Kann ich dann aber auch noch in PHP abchecken sobald ich die Devices schon einmal im Vorfeld etwas eingeschränkthabe.
vielen Dank im Voraus für Eure Hilfe!
Thomas.
Also ich möchte alle User herausbekommen die in einer Stadt leben, deren Name irgendwie in der angegebenen Adresse vorkommt.
Du könntest in der Datenbank an Anfang und Ende des Namens in town je ein "%" setzen.
und dann:
SELECT id, name FROM user WHERE 'Alserstrasse 74;1130 Vienna;Austria' LIKE town;
Zumindest mache ich das irgendwo auch so oder so ähnlich.
Du könntest in der Datenbank an Anfang und Ende des Namens in town je ein "%" setzen.
Warum nicht nur während der Abfrage mit der entsprechenden Verkettungsfunktion?
Du könntest in der Datenbank an Anfang und Ende des Namens in town je ein "%" setzen.
Warum nicht nur während der Abfrage mit der entsprechenden Verkettungsfunktion?
In meinem Anwendungsfall kenne ich weder die Anzahl noch die Positionen der %-Zeichen innerhalb des Strings. Ich habe nur meinen Ansatz unterbreitet und schon damit gerechnet, daß es noch andere Möglichkeiten gibt. Wenn ich damit deine Antwort provoziert habe, war es schon hilfreich. :-P
Wenn ich damit deine Antwort provoziert habe, war es schon hilfreich. :-P
Provozier mich nicht :p oder anders:
Rüttle nicht am Watschenbaum, es reift die Frucht, du merkst es kaum :)
Na ich wollte mit meiner Frage bitte keine Schlägerei provozieren :)
Gehet hin in Frieden, pfleget und vermehret Eure Daten und schlaget nicht Eure Mitmenschen! :)
Hallo nochmal!
Mittlerweile konnte ich das Problem zufriedenstellend lösen. Es funktioniert über die SQL-Funktion instr().
Meine Abfrage ist jetzt sicher weder optimal noch sehr schön, aber sie tut genau das was ich möchte:
SELECT model, manufacturer, id1pos, id2pos
FROM (
SELECT devices.model,
devices.manufacturer,
instr( ' MOT-V980/80.2E.29. MIB/2.2.1 Profile/MIDP-2.0 Configuration/CLDC-1.1', devices.identifier1 ) AS id1pos,
instr( ' MOT-V980/80.2E.29. MIB/2.2.1 Profile/MIDP-2.0 Configuration/CLDC-1.1', devices.identifier2 ) AS id2pos
FROM fmw_devices AS devices
)
AS devpos
WHERE id1pos >0
AND id2pos >0
AND id1pos < id2pos
Somit habe ich gewährleistet, daß ich nur solche Geräte geliefert bekomme, bei denen identifier1 und identifier2 im übergebenen String vorkommen und ausserdem noch, daß identifier1 vor identifier2 auftreten muß.
Also falls jemals jemand etwas Ähnliches brauchen sollte, kann er es ja hier nachlesen ;)
viele Grüsse & Danke für Eure Bemühungen
Thomas.