Finalmente no he podido hacerlo como me decía Shiryu_Libra, por varias razones:
El subindice caía fuera del intervalo cuando encontraba a un hijo
La matríz tenía que ser de 12 dimensiones
Quería página los resultados
etc...
así que lo dejé por un tiempo y ayer se me ocurrió un forma tosca pero funciona
Código PHP:
Recogo el valor del form
Hago un Split
Call ConectarForo
Call Registro (rs)
' Con las subcadena inicio la consulta
SQL = "Select IdMensaje, Cabecera, Padre, Cuerpo, Fecha FROM Mensajes WHERE "
For i=0 to (UBound(array_cadena))
if i <> 0 then
SQL = SQL & "OR "
end if
SQL = SQL & "LCase(Cuerpo) LIKE '%"&Espacio & array_cadena(i) & Espacio&"%' "
Next 'i
SQL = SQL & "ORDER BY Fecha desc;"
rs.Open SQL, oConn,3,1
IF rs.EOF then ' No se han contrado registros
%>
No se ha encontrado nada
<%
ELSE ' Se encontraron registros
' ====== Saca Id's de registros encontrados
Dim registros
Dim suma
registros=rs.getrows
suma = UBound(registros,2)+1
' ====== Fin Saca Id's de registros encontrados
Call LimpiarRS (rs)
' ========= Elimino los registros repetetidos en la consulta anterior ===============
Dim iniValores()
Dim limValores()
Redim iniValores(suma)
For j=0 to UBound(registros,2)
iniValores(j) =registros(IdCabecera,j)
Next 'j
redim preserve limValores(1)
limValores(0)=iniValores(0)
For x=0 to (UBound(iniValores)-1)
Dim resultado
resultado=0
For y=0 to (ubound(limValores)-1)
resultado=StrComp(iniValores(x),limValores(y),1)
if (resultado=0) then
exit for
end if
Next 'y
if(resultado<>0)then
redim preserve limValores(ubound(limValores)+1)
limValores(ubound(limValores)-1)=iniValores(x)
end if
Next 'x
' ========= Fin Elimino los registros repetetidos ===============
Call Registro (rs1)
' Consulta sobre las Ids resultantes
SQL = "Select IdMensaje, Fecha FROM Mensajes WHERE "
For z=0 to (UBound(limValores)-1)
if z <> 0 then
SQL = SQL & "OR "
end if
SQL = SQL & "IdMensaje = "& CInt(limValores(z)) & " "
Next ' z
SQL = SQL & "ORDER BY Fecha desc;"
rs1.Open SQL, oConn,3,1
' ====== Saca Id's de registros encontrados
Dim resulfinal
resulfinal=rs1.getrows
' ====== Fin Saca Id's de registros encontrados
Call LimpiarRS (rs1)
Call LimpiarConexion
'========== Imprime lista registros encontrados ==========
For z=0 to UBound(resulfinal,2)
%>
Listado de registros
<%
Next 'z
' ==== Fin imprime lista registros encontrados ========
%>
Esto es todo