Ich könnte eine grobe ungetestete Idee mit
REGEXP anbieten. Ob das funktioniert, kann ich nicht versprechen:
Code:
... `feld` REGEXP '>[^<]*Suchbegriff'
Die Regex-Syntax ist bestimmt noch nicht ganz richtig, aber die Art, wie ich versuchen würde, Tags auszuschließen sollte klar werden (-> finde das Ende des Tags, erlaube keinen neuen Tag-Anfang, finde den Suchbegriff). Um auch in Texten zu suchen, die nicht mit einem Tag beginnen, müßte man vielleicht mit oder noch einen zweiten Ausdruck anfügen:
Code:
... `feld` REGEXP '^[^<]*Suchbegriff'
Hier: ->Finde, vom Anfang des Textes suchend, keinen Tag-Anfang und dann den Suchbegriff.
Die
richtige Syntax für reguläre Ausdrücke müsstest Du Dir selbst noch zusammensuchen.
Gruß hpvw
EDIT: Neugier überwiegt. Ich habe es getestet und es funktioniert in meinem Testfall. Es mag vielleicht nicht jeden Fall der HTML-Syntax abdecken, das kann ich so ad hoc einfach nicht überblicken, aber in Standardsituationen scheint es zu funktionieren. Hier mein Beispiel:
Code:
mysql> select * from htmlsuche;
+----+----------------------------------------------------------------+
| id | html |
+----+----------------------------------------------------------------+
| 1 | <html>bla suchbegriff bla</html> |
| 2 | bla suchbegriff bla<tag>blub foo</tag> bla |
| 3 | bla bla<tag>blub foo</tag> bla suchbegriff |
| 4 | bla bla<tag>blub suchbegriff foo</tag> bla |
| 5 | bla <tag attrib="suchbegriff">blub foo</tag> bla suchbegriff |
| 6 | bla bla <tag attrib="suchbegriff">blub foo</tag> bla |
| 7 | bla <tag suchbegriff="value">blub foo</tag> bla suchbegriff |
| 8 | bla bla<tag suchbegriff="value">blub foo</tag> bla |
| 9 | <html>sb nicht vorhanden</html> |
| 10 | sb nicht vorhanden <tag>hier auch nicht</tag> immer noch nicht |
+----+----------------------------------------------------------------+
10 rows in set (0.00 sec)
mysql> select * from htmlsuche
-> where `html` REGEXP '>[^<]*suchbegriff'
-> or `html` REGEXP '^[^<]*suchbegriff';
+----+---------------------------------------------------------------+
| id | html |
+----+---------------------------------------------------------------+
| 1 | <html>bla suchbegriff bla</html> |
| 2 | bla suchbegriff bla<tag>blub foo</tag> bla |
| 3 | bla bla<tag>blub foo</tag> bla suchbegriff |
| 4 | bla bla<tag>blub suchbegriff foo</tag> bla |
| 5 | bla <tag attrib="suchbegriff">blub foo</tag> bla suchbegriff |
| 7 | bla <tag suchbegriff="value">blub foo</tag> bla suchbegriff |
+----+---------------------------------------------------------------+
6 rows in set (0.00 sec)
Noch'n Edit:
@DealeyLama
Ich würde die Aussage, dass eine Datenbank nicht zum verarbeiten von Inhalten da ist nicht so pauschal treffen. Wenn Du vieles im Query erledigen kannst, ist Deine Applikation leichter auf andere Anwendungssprachen übertragbar, da Du nur die Queries mitnehmen musst, beispielsweise bei einer Umstellung von PHP auf JSP. Wenn man sich ein bisschen mit spezifischen Funktionen zurückhält, ist auch die Umstellung auf ein anderes DBMS nicht so schlimm. Ich habe mit PHP und MySQL die Erfahrung gemacht, dass es meist performanter ist, vieles von der Datenbank erledigen zu lassen und PHP gar nicht erst so viele Ergebnisse zukommen zu lassen. Vermutlich ist die Schnittstelle zwischen MySQL und PHP nicht die schnellste.
Bei großen Datenbanken würde ich Dir allerdings recht geben, da es leichter ist, Webserver bzw. die Server für die weiterverabeitende Anwendung zu skalieren, als einen Datenbankserver.