Jag fick förslaget från en kollega att man kanske kunde använda "subselects". Jag har aldrig gjort det så jag har ingen aning om det skulle funka. Kanske nåt i stil med det här skulle fungera:
{
SELECT * FROM tabell WHERE kolumn LIKE %Sökord% [i]men inte[/i]
{
SELECT [i]allt som står inom taggar[/i]
}
}
Det problem som man inte kan kontrollera med like är om det finns noll eller flera förkomster av en sträng.
Som jag ser det så måste du titta på tecken för tecken och hålla reda på status (t.ex. om du har hittat < men ingen > är en viss status.)
create function wt_regexp(@str varchar(200),@search varchar(30)) returns int
as
begin
declare @l,@p,@s int
select @l = len(str), @p = 1,@s = 0
while @p <= @l
begin
if substring(@str,@p,1) = '<' @s = @s + 1
else if substring(@str,@p,1) = '>' @s = @s - 1
else if @s = 0 and
substring(@str,@p,len(@search)) = @search return 1
set @p = @p + 1
end
return 0
I princip alltså (jag har inte kollat alla detaljer i ditt regexp)
sen så kan du använda
$q= "SELECT kol FROM tabell WHERE wt_REGEXP(kol,'$SearchWord' > 0") or die ("Fel");
Det är enklare att plocka upp all data till PHP och använda eregi_test. Det kanske går på ett ut prestandamässigt eftersom Tsql-funktionen inte kan bli speciellt effektiv.
Det blir ju olika kod för olika DBMS, men jag ser inte hur du kan undvika det i alla fall.