Busca por palavra chave

07/06/2005 - 16:37 por Carlos Balestrini | Informe spam
Buenos dias:
Antes que nada les pido desculpas se eu escribo mal pois aunque soy
argentino vivo en Brasil e lamentablemente mezclo as palavras con las duas
lenguas.
Primeiro aclaro que não sei nada de ASP.
Mi pregunta viene al caso que estou asesorando a una empresa que al mesmo
tempo esta fazendo una transformación de su site. El mesmo esta escrito en
ASP.
A empresa é de Recursos Humanos e por consiguiente a base de datos do mesmo
son currículos.
Cada currículo esta conformado por varios campos e diferentes registros en
una base de dados SQL, en diferentes tabelas.
Agora viene la cuestión.
El sistema permite una busca por palavra chave tipo sistema Google. Una de
las opciones es colocar varias palabras e que el sistema busque el o los
currículos que contengan todas esas palabras. Espero hasta aca que se me
haya entendido.
Cual es el problema. O sistema busa en todo el currículo (los diferentes
campos y registros que se le indican por el programa), currículo por
currículo, OK.
Mas solo encuentra con sucesso cuando todas las palabras estan en el mesmo
campo del mismo registro. Es decir, si una palabra esta en un campo, otra
esta en otro campo e quizas en otro registro, etc, no da sucesso la busca.
Solo da sucesso (exito, currículo que cumple la condición colocada) cuando
todas as palavras estão no mesmo campo do mesmo registro.
O desenvolvedor atual explica na empresa que modificar esto seria imposible,
que provocaria un cambio bastante grande.
El dice que las palavras que uno coloca a buscar, el sistema no las salva en
diferentes variables (matriz o no) y que por eso en el sistema de busca no
se puede ir barriendo palavra por palavra, campo por campo, registro por
registro, para encontrar el sucesso. El sistema busca las palavras todas
juntas. Aclaro que las mismas no necesariamente deben estar contiguas mas si
deben estar en el mismo campo para dar suceso. Mas no se porque no entiendo
las explicaciones como hace la busca con que tipo de procedimiento.
Antes de hacer la pregunta espero que se me haya entendido e agradeço a
todos los interesados.
Pregunto: en función de lo explicado tiene logica lo que dice el
desarrollador?
Podría ser facil solucionar esto?
Que ideas sugieren para solucionar?

Muchas gracias

Carlos Balestrini

Preguntas similare

Leer las respuestas

#6 Carlos Balestrini
08/06/2005 - 21:17 | Informe spam
Voldov e Nuno Santos:
Desculpem os demais que mencione a ellos mas são os que respondieron. Mas
esta consulta es para quien me possa ajudar.

Pido desculpas se o que coloco ahora es muito largo. Aceito todas as
criticas e cuestionamentos porque entiendo que haya personas que tem
conexión por Dial-up e les cueste baixar este e-mail.
Mas aqui transcrivo as sentencias da busqueda que me envio el desarrollador.
Eu entiendo poco das mesmas, mas talvez vocês possam indicar onde pode ser
incluidas o melhoradas as sentencias que indicaron.
Muchas Gracias a todos

Carlos Balestrini
ALTER procedure dbo.sp_busca_avancada_c @p1 varchar(1000),

@p2 varchar(1000), @p3 varchar(1000), @p4 varchar(1000)


as

begin


declare @v_sqlstmt varchar(8000)

set @v_sqlstmt = 'select a.nome, a.sobrenome,a.id_candidato,'+

' a.qualificacoes_desc,
a.cidade,a.cliente_emp,a.status_candidato, '+

' a.desc_func_e_c,a.areas_proc_c,a.cargos_proc_c, a.uf from '+

' tb_candidato a

where a.id_candidato > 0 '



if @p1 <> ''

begin

if patindex('%and%', @p1) = 0

begin

set @v_sqlstmt = @v_sqlstmt +

'and

(

contains(a.*,'''+@p1 +''') '+

' or a.id_candidato in (select
e.id_candidato from '+

' tb_formacao e where
contains(e.*,'''+@p1+

''') and e.nome_curso <> '''')

or a.id_candidato in ' +

' (select f.id_candidato from
tb_curso_comp f where '+

' contains(f.*,'''+@p1+'''))

or a.id_candidato in ' +

' (select g.id_candidato from
tb_exp_pro g left outer join '+

' tb_area_prof h on g.cod_area
= h.cod_area left outer join '+

' tb_cargo i on g.cod_cargo =
i.cod_cargo where '+

' contains(g.*,'''+@p1+''')

or contains(h.*,'''+@p1+''')
'+

' or contains(i.*,'''+@p1+'''))

or a.id_candidato in '+

' (select b.id_candidato from
tb_vaga_proc b left outer join '+

' tb_area_prof c on b.cod_area
= c.cod_area left outer join '+

' tb_cargo d on b.cod_cargo =
d.cod_cargo where '+

' contains(b.*,'''+@p1+''')or
contains(c.*,'''+@p1+''')'+

' or contains(d.*,'''+@p1+'''))

) '

end

else

begin

declare @v_pos_ini int, @v_pos_fim int,
@v_chr as char(1), @v_cont int, @v_str varchar(8000), @v_p1 varchar(8000)

set @v_p1 =
ltrim(rtrim(replace(@p1,'and','')))

set @v_pos_ini = 0

set @v_pos_fim = 0

set @v_chr = ''

set @v_str = ''

set @v_cont = 1

while @v_cont <= len(@v_p1)

begin

if substring(@v_p1, @v_cont,
1) <> ' '

begin

set @v_str =
@v_str + substring(@v_p1, @v_cont, 1)

end

else

begin

if @v_str <> ''

begin

set
@v_sqlstmt = @v_sqlstmt +

'and

(


contains(a.*,'''+ @v_str+''') '+

'
or a.id_candidato in (select e.id_candidato from '+

'
tb_formacao e where contains(e.*,'''+ @v_str+

''')
and e.nome_curso <> '''')


or a.id_candidato in ' +

'
(select f.id_candidato from tb_curso_comp f where '+

'
contains(f.*,'''+ @v_str+'''))


or a.id_candidato in ' +

'
(select g.id_candidato from tb_exp_pro g left outer join '+

'
tb_area_prof h on g.cod_area = h.cod_area left outer join '+

'
tb_cargo i on g.cod_cargo = i.cod_cargo where '+

'
contains(g.*,'''+ @v_str+''')


or contains(h.*,'''+ @v_str+''') '+

'
or contains(i.*,'''+ @v_str+'''))


or a.id_candidato in '+

'
(select b.id_candidato from tb_vaga_proc b left outer join '+

'
tb_area_prof c on b.cod_area = c.cod_area left outer join '+

'
tb_cargo d on b.cod_cargo = d.cod_cargo where '+

'
contains(b.*,'''+ @v_str+''')or contains(c.*,'''+ @v_str+''')'+

'
or contains(d.*,'''+ @v_str+'''))



) '

end

set @v_str = ''



end



set @v_cont = @v_cont + 1

end

if @v_str <> ''

begin

set @v_sqlstmt =
@v_sqlstmt +

'and

(

contains(a.*,'''+
@v_str+''') '+

' or
a.id_candidato in (select e.id_candidato from '+

'
tb_formacao e where contains(e.*,'''+ @v_str+

''') and
e.nome_curso <> '''')

or
a.id_candidato in ' +

'
(select f.id_candidato from tb_curso_comp f where '+

'
contains(f.*,'''+ @v_str+'''))

or
a.id_candidato in ' +

'
(select g.id_candidato from tb_exp_pro g left outer join '+

'
tb_area_prof h on g.cod_area = h.cod_area left outer join '+

'
tb_cargo i on g.cod_cargo = i.cod_cargo where '+

'
contains(g.*,'''+ @v_str+''')

or
contains(h.*,'''+ @v_str+''') '+

' or
contains(i.*,'''+ @v_str+'''))

or
a.id_candidato in '+

'
(select b.id_candidato from tb_vaga_proc b left outer join '+

'
tb_area_prof c on b.cod_area = c.cod_area left outer join '+

'
tb_cargo d on b.cod_cargo = d.cod_cargo where '+

'
contains(b.*,'''+ @v_str+''')or contains(c.*,'''+ @v_str+''')'+

' or
contains(d.*,'''+ @v_str+'''))



) '

end

end

end


if @p2 <> ''

begin

set @v_sqlstmt = @v_sqlstmt +

'and

(

contains(a.*,'''+@p2 +''') '+

' or a.id_candidato in (select
e.id_candidato from '+

' tb_formacao e where
contains(e.*,'''+@p2+

''') and e.nome_curso <> '''')

or a.id_candidato in ' +

' (select f.id_candidato from
tb_curso_comp f where '+

' contains(f.*,'''+@p2+'''))

or a.id_candidato in ' +

' (select g.id_candidato from tb_exp_pro g
left outer join '+

' tb_area_prof h on g.cod_area =
h.cod_area left outer join '+

' tb_cargo i on g.cod_cargo = i.cod_cargo
where '+

' contains(g.*,'''+@p2+''')

or contains(h.*,'''+@p2+''') '+

' or contains(i.*,'''+@p2+'''))

or a.id_candidato in '+

' (select b.id_candidato from tb_vaga_proc
b left outer join '+

' tb_area_prof c on b.cod_area =
c.cod_area left outer join '+

' tb_cargo d on b.cod_cargo = d.cod_cargo
where '+

' contains(b.*,'''+@p2+''')or
contains(c.*,'''+@p2+''')'+

' or contains(d.*,'''+@p2+'''))



) '

end


if @p3 <> ''

begin

set @v_sqlstmt = @v_sqlstmt +



'and

(

contains(a.*,'''+@p3 +''') '+

' or a.id_candidato in (select
e.id_candidato from '+

' tb_formacao e where
contains(e.*,'''+@p3+

''') and e.nome_curso <> '''')

or a.id_candidato in ' +

' (select f.id_candidato from
tb_curso_comp f where '+

' contains(f.*,'''+@p3+'''))

or a.id_candidato in ' +

' (select g.id_candidato from tb_exp_pro g
left outer join '+

' tb_area_prof h on g.cod_area =
h.cod_area left outer join '+

' tb_cargo i on g.cod_cargo = i.cod_cargo
where '+

' contains(g.*,'''+@p3+''')

or contains(h.*,'''+@p3+''') '+

' or contains(i.*,'''+@p3+'''))

or a.id_candidato in '+

' (select b.id_candidato from tb_vaga_proc
b left outer join '+

' tb_area_prof c on b.cod_area =
c.cod_area left outer join '+

' tb_cargo d on b.cod_cargo = d.cod_cargo
where '+

' contains(b.*,'''+@p3+''')or
contains(c.*,'''+@p3+''')'+

' or contains(d.*,'''+@p3+'''))

) '

end


if @p4 <> ''

begin

declare @v_p4 varchar(8000)

set @v_p4 = replace( @p4 , ' and ', ' or ')

set @v_sqlstmt = @v_sqlstmt +

'and

(

not contains(a.*,'''+@v_p4 +''') '+

' and a.id_candidato not in (select
e.id_candidato from '+

' tb_formacao e where
contains(e.*,'''+@v_p4+

'''))

and a.id_candidato not in ' +

' (select f.id_candidato from
tb_curso_comp f where '+

' contains(f.*,'''+@v_p4+'''))

and a.id_candidato not in ' +

' (select g.id_candidato from tb_exp_pro g
left outer join '+

' tb_area_prof h on g.cod_area =
h.cod_area left outer join '+

' tb_cargo i on g.cod_cargo = i.cod_cargo
where '+

' contains(g.*,'''+@v_p4+''')

or contains(h.*,'''+@v_p4+''') '+

' or contains(i.*,'''+@v_p4+'''))

and a.id_candidato not in '+

' (select b.id_candidato from tb_vaga_proc
b left outer join '+

' tb_area_prof c on b.cod_area =
c.cod_area left outer join '+

' tb_cargo d on b.cod_cargo = d.cod_cargo
where '+

' contains(b.*,'''+@v_p4+''') or
contains(c.*,'''+@v_p4+''')'+

' or contains(d.*,'''+@v_p4+'''))

) '

end

set @v_sqlstmt = @v_sqlstmt +

' order by convert(int,a.status_candidato) desc , ' +

' a.nome,a.sobrenome asc , a.data_cadastro desc '

execute(@v_sqlstmt)

end


"Valdov" escreveu na mensagem
news:
: D

tal vez con mas detalles o si existe algun lugar donde podamos ver el
sitio podriamos ayudarte mejor, ya que no solo lo imaginariamos.

Valdov
Id Msn Messenger:




"Carlos Balestrini" escribió en el
mensaje news:%
Valdov, muchas gracias.

Yo no entiendo de ASP como explique. Conozco Access (VBA) e algo de VB
porque fiz trabajos con eles.
Mas, me siento tranquilo con tu comentario porque acho que tiene solução
e si no é este desenvolvedor habra otro que lo podera fazer.
Estamos en los ultimos pasos para colocar esta versão no ar e já se tiene
previsto iniciar una nueva etapa con mas mejoras. Yo estoy en la duda y
eso expreso en la empresa si este desenvolvedor es el adecuado.
Agora queria y quiero ideas de como solucionar esto porque seria mucho
mejor ya poder colocar esto en esta versión.

Nuevamente muchas gracias a vos como a todos los que han leido mi e-mail.

Veo que sos de México. Yo trabajé en México en el año 93 y la pase muy
bien, tengo muy buenos recuerdos. Viví en DF, Veracruz e Villa Hermosa.

Carlos Balestrini

"Valdov" escreveu na mensagem
news:%
Hola:

Si entendi bien, el desarrollador dice que seria imposible o muy
grandes los cambios que hacer, no creo que tenga mucha logica, en su
ventana de busqueda deben de registrar no se tres campos ya
predefinidos, referentes a los campos de una tabla (curriculum) en la
base de datos. Para buscar las coincidencias en todos los campos a la
vez deben de tener algo como:

Select * from Curriculum Where campo1 like '%Valor1%' AND campo2 like
'%Valor2%'

Esto limita la busqueda a que lo buscado aparezca en cada campo de
los registros respectivamente y lo que necesitan creo que es:

Select * from Curriculum Where campo1 like '%Valor1%' OR campo2 like
'%Valor2%'

Es solo una idea, tal vez no entendi bien lo que necesitas, de
cualquier forma espero haberte ayudado.

Valdov
Id Msn Messenger:




"Carlos Balestrini" escribió en el
mensaje news:%
Buenos dias:
Antes que nada les pido desculpas se eu escribo mal pois aunque soy
argentino vivo en Brasil e lamentablemente mezclo as palavras con las
duas lenguas.
Primeiro aclaro que não sei nada de ASP.
Mi pregunta viene al caso que estou asesorando a una empresa que al
mesmo tempo esta fazendo una transformación de su site. El mesmo esta
escrito en ASP.
A empresa é de Recursos Humanos e por consiguiente a base de datos do
mesmo son currículos.
Cada currículo esta conformado por varios campos e diferentes registros
en una base de dados SQL, en diferentes tabelas.
Agora viene la cuestión.
El sistema permite una busca por palavra chave tipo sistema Google. Una
de las opciones es colocar varias palabras e que el sistema busque el o
los currículos que contengan todas esas palabras. Espero hasta aca que
se me haya entendido.
Cual es el problema. O sistema busa en todo el currículo (los
diferentes campos y registros que se le indican por el programa),
currículo por currículo, OK.
Mas solo encuentra con sucesso cuando todas las palabras estan en el
mesmo campo del mismo registro. Es decir, si una palabra esta en un
campo, otra esta en otro campo e quizas en otro registro, etc, no da
sucesso la busca. Solo da sucesso (exito, currículo que cumple la
condición colocada) cuando todas as palavras estão no mesmo campo do
mesmo registro.
O desenvolvedor atual explica na empresa que modificar esto seria
imposible, que provocaria un cambio bastante grande.
El dice que las palavras que uno coloca a buscar, el sistema no las
salva en diferentes variables (matriz o no) y que por eso en el sistema
de busca no se puede ir barriendo palavra por palavra, campo por campo,
registro por registro, para encontrar el sucesso. El sistema busca las
palavras todas juntas. Aclaro que las mismas no necesariamente deben
estar contiguas mas si deben estar en el mismo campo para dar suceso.
Mas no se porque no entiendo las explicaciones como hace la busca con
que tipo de procedimiento.
Antes de hacer la pregunta espero que se me haya entendido e agradeço a
todos los interesados.
Pregunto: en función de lo explicado tiene logica lo que dice el
desarrollador?
Podría ser facil solucionar esto?
Que ideas sugieren para solucionar?

Muchas gracias

Carlos Balestrini













Respuesta Responder a este mensaje
#7 Valdov
09/06/2005 - 03:28 | Informe spam
Carlos:

Asi dandole una revisada rápida, creo que si la va a tener mas
complicada tu desarrollador, porque lo que te comentaba acerca del Like,
esta bien suplantado por Contains, para mi el error asi sin meterme muy a
fondo no va en la clausula Where sino en los Left Outer Join.

Dale una revisada a este enlace o busca en google sobre el tema (este
esta en español):

http://www.vhfdx.net/docsql_e.html#union
Valdov
Id Msn Messenger:




"Carlos Balestrini" escribió en el
mensaje news:
Voldov e Nuno Santos:
Desculpem os demais que mencione a ellos mas são os que respondieron. Mas
esta consulta es para quien me possa ajudar.

Pido desculpas se o que coloco ahora es muito largo. Aceito todas as
criticas e cuestionamentos porque entiendo que haya personas que tem
conexión por Dial-up e les cueste baixar este e-mail.
Mas aqui transcrivo as sentencias da busqueda que me envio el
desarrollador. Eu entiendo poco das mesmas, mas talvez vocês possam
indicar onde pode ser incluidas o melhoradas as sentencias que indicaron.
Muchas Gracias a todos

Carlos Balestrini
ALTER procedure dbo.sp_busca_avancada_c @p1 varchar(1000),

@p2 varchar(1000), @p3 varchar(1000), @p4 varchar(1000)


as

begin


declare @v_sqlstmt varchar(8000)

set @v_sqlstmt = 'select a.nome, a.sobrenome,a.id_candidato,'+

' a.qualificacoes_desc,
a.cidade,a.cliente_emp,a.status_candidato, '+

' a.desc_func_e_c,a.areas_proc_c,a.cargos_proc_c, a.uf from '+

' tb_candidato a

where a.id_candidato > 0 '



if @p1 <> ''

begin

if patindex('%and%', @p1) = 0

begin

set @v_sqlstmt = @v_sqlstmt +

'and

(

contains(a.*,'''+@p1 +''')
'+

' or a.id_candidato in
(select e.id_candidato from '+

' tb_formacao e where
contains(e.*,'''+@p1+

''') and e.nome_curso <> '''')

or a.id_candidato in ' +

' (select f.id_candidato from
tb_curso_comp f where '+

' contains(f.*,'''+@p1+'''))

or a.id_candidato in ' +

' (select g.id_candidato from
tb_exp_pro g left outer join '+

' tb_area_prof h on g.cod_area
= h.cod_area left outer join '+

' tb_cargo i on g.cod_cargo =
i.cod_cargo where '+

' contains(g.*,'''+@p1+''')

or contains(h.*,'''+@p1+''')
'+

' or
contains(i.*,'''+@p1+'''))

or a.id_candidato in '+

' (select b.id_candidato from
tb_vaga_proc b left outer join '+

' tb_area_prof c on b.cod_area
= c.cod_area left outer join '+

' tb_cargo d on b.cod_cargo =
d.cod_cargo where '+

' contains(b.*,'''+@p1+''')or
contains(c.*,'''+@p1+''')'+

' or
contains(d.*,'''+@p1+'''))

) '

end

else

begin

declare @v_pos_ini int, @v_pos_fim
int, @v_chr as char(1), @v_cont int, @v_str varchar(8000), @v_p1
varchar(8000)

set @v_p1 =
ltrim(rtrim(replace(@p1,'and','')))

set @v_pos_ini = 0

set @v_pos_fim = 0

set @v_chr = ''

set @v_str = ''

set @v_cont = 1

while @v_cont <= len(@v_p1)

begin

if substring(@v_p1, @v_cont,
1) <> ' '

begin

set @v_str =
@v_str + substring(@v_p1, @v_cont, 1)

end

else

begin

if @v_str <>
''

begin

set
@v_sqlstmt = @v_sqlstmt +

'and

(


contains(a.*,'''+ @v_str+''') '+

' or
a.id_candidato in (select e.id_candidato from '+

'
tb_formacao e where contains(e.*,'''+ @v_str+

''')
and e.nome_curso <> '''')


or a.id_candidato in ' +

'
(select f.id_candidato from tb_curso_comp f where '+

'
contains(f.*,'''+ @v_str+'''))


or a.id_candidato in ' +

'
(select g.id_candidato from tb_exp_pro g left outer join '+

'
tb_area_prof h on g.cod_area = h.cod_area left outer join '+

'
tb_cargo i on g.cod_cargo = i.cod_cargo where '+

'
contains(g.*,'''+ @v_str+''')


or contains(h.*,'''+ @v_str+''') '+

' or
contains(i.*,'''+ @v_str+'''))


or a.id_candidato in '+

'
(select b.id_candidato from tb_vaga_proc b left outer join '+

'
tb_area_prof c on b.cod_area = c.cod_area left outer join '+

'
tb_cargo d on b.cod_cargo = d.cod_cargo where '+

'
contains(b.*,'''+ @v_str+''')or contains(c.*,'''+ @v_str+''')'+

' or
contains(d.*,'''+ @v_str+'''))



) '

end

set @v_str = ''



end



set @v_cont = @v_cont + 1

end

if @v_str <> ''

begin

set @v_sqlstmt =
@v_sqlstmt +

'and

(


contains(a.*,'''+ @v_str+''') '+

' or
a.id_candidato in (select e.id_candidato from '+

' tb_formacao e
where contains(e.*,'''+ @v_str+

''') and
e.nome_curso <> '''')

or
a.id_candidato in ' +

' (select
f.id_candidato from tb_curso_comp f where '+

'
contains(f.*,'''+ @v_str+'''))

or
a.id_candidato in ' +

' (select
g.id_candidato from tb_exp_pro g left outer join '+

' tb_area_prof h
on g.cod_area = h.cod_area left outer join '+

' tb_cargo i on
g.cod_cargo = i.cod_cargo where '+

'
contains(g.*,'''+ @v_str+''')

or
contains(h.*,'''+ @v_str+''') '+

' or
contains(i.*,'''+ @v_str+'''))

or
a.id_candidato in '+

' (select
b.id_candidato from tb_vaga_proc b left outer join '+

' tb_area_prof c
on b.cod_area = c.cod_area left outer join '+

' tb_cargo d on
b.cod_cargo = d.cod_cargo where '+

'
contains(b.*,'''+ @v_str+''')or contains(c.*,'''+ @v_str+''')'+

' or
contains(d.*,'''+ @v_str+'''))



) '

end

end

end


if @p2 <> ''

begin

set @v_sqlstmt = @v_sqlstmt +

'and

(

contains(a.*,'''+@p2 +''') '+

' or a.id_candidato in (select
e.id_candidato from '+

' tb_formacao e where
contains(e.*,'''+@p2+

''') and e.nome_curso <> '''')

or a.id_candidato in ' +

' (select f.id_candidato from
tb_curso_comp f where '+

' contains(f.*,'''+@p2+'''))

or a.id_candidato in ' +

' (select g.id_candidato from tb_exp_pro
g left outer join '+

' tb_area_prof h on g.cod_area =
h.cod_area left outer join '+

' tb_cargo i on g.cod_cargo = i.cod_cargo
where '+

' contains(g.*,'''+@p2+''')

or contains(h.*,'''+@p2+''') '+

' or contains(i.*,'''+@p2+'''))

or a.id_candidato in '+

' (select b.id_candidato from
tb_vaga_proc b left outer join '+

' tb_area_prof c on b.cod_area =
c.cod_area left outer join '+

' tb_cargo d on b.cod_cargo = d.cod_cargo
where '+

' contains(b.*,'''+@p2+''')or
contains(c.*,'''+@p2+''')'+

' or contains(d.*,'''+@p2+'''))



) '

end


if @p3 <> ''

begin

set @v_sqlstmt = @v_sqlstmt +



'and

(

contains(a.*,'''+@p3 +''') '+

' or a.id_candidato in (select
e.id_candidato from '+

' tb_formacao e where
contains(e.*,'''+@p3+

''') and e.nome_curso <> '''')

or a.id_candidato in ' +

' (select f.id_candidato from
tb_curso_comp f where '+

' contains(f.*,'''+@p3+'''))

or a.id_candidato in ' +

' (select g.id_candidato from tb_exp_pro
g left outer join '+

' tb_area_prof h on g.cod_area =
h.cod_area left outer join '+

' tb_cargo i on g.cod_cargo = i.cod_cargo
where '+

' contains(g.*,'''+@p3+''')

or contains(h.*,'''+@p3+''') '+

' or contains(i.*,'''+@p3+'''))

or a.id_candidato in '+

' (select b.id_candidato from
tb_vaga_proc b left outer join '+

' tb_area_prof c on b.cod_area =
c.cod_area left outer join '+

' tb_cargo d on b.cod_cargo = d.cod_cargo
where '+

' contains(b.*,'''+@p3+''')or
contains(c.*,'''+@p3+''')'+

' or contains(d.*,'''+@p3+'''))

) '

end


if @p4 <> ''

begin

declare @v_p4 varchar(8000)

set @v_p4 = replace( @p4 , ' and ', ' or ')

set @v_sqlstmt = @v_sqlstmt +

'and

(

not contains(a.*,'''+@v_p4 +''') '+

' and a.id_candidato not in (select
e.id_candidato from '+

' tb_formacao e where
contains(e.*,'''+@v_p4+

'''))

and a.id_candidato not in ' +

' (select f.id_candidato from
tb_curso_comp f where '+

' contains(f.*,'''+@v_p4+'''))

and a.id_candidato not in ' +

' (select g.id_candidato from tb_exp_pro
g left outer join '+

' tb_area_prof h on g.cod_area =
h.cod_area left outer join '+

' tb_cargo i on g.cod_cargo = i.cod_cargo
where '+

' contains(g.*,'''+@v_p4+''')

or contains(h.*,'''+@v_p4+''') '+

' or contains(i.*,'''+@v_p4+'''))

and a.id_candidato not in '+

' (select b.id_candidato from
tb_vaga_proc b left outer join '+

' tb_area_prof c on b.cod_area =
c.cod_area left outer join '+

' tb_cargo d on b.cod_cargo = d.cod_cargo
where '+

' contains(b.*,'''+@v_p4+''') or
contains(c.*,'''+@v_p4+''')'+

' or contains(d.*,'''+@v_p4+'''))

) '

end

set @v_sqlstmt = @v_sqlstmt +

' order by convert(int,a.status_candidato) desc , ' +

' a.nome,a.sobrenome asc , a.data_cadastro desc '

execute(@v_sqlstmt)

end


"Valdov" escreveu na mensagem
news:
: D

tal vez con mas detalles o si existe algun lugar donde podamos ver el
sitio podriamos ayudarte mejor, ya que no solo lo imaginariamos.

Valdov
Id Msn Messenger:




"Carlos Balestrini" escribió en el
mensaje news:%
Valdov, muchas gracias.

Yo no entiendo de ASP como explique. Conozco Access (VBA) e algo de VB
porque fiz trabajos con eles.
Mas, me siento tranquilo con tu comentario porque acho que tiene solução
e si no é este desenvolvedor habra otro que lo podera fazer.
Estamos en los ultimos pasos para colocar esta versão no ar e já se
tiene previsto iniciar una nueva etapa con mas mejoras. Yo estoy en la
duda y eso expreso en la empresa si este desenvolvedor es el adecuado.
Agora queria y quiero ideas de como solucionar esto porque seria mucho
mejor ya poder colocar esto en esta versión.

Nuevamente muchas gracias a vos como a todos los que han leido mi
e-mail.

Veo que sos de México. Yo trabajé en México en el año 93 y la pase muy
bien, tengo muy buenos recuerdos. Viví en DF, Veracruz e Villa Hermosa.

Carlos Balestrini

"Valdov" escreveu na mensagem
news:%
Hola:

Si entendi bien, el desarrollador dice que seria imposible o muy
grandes los cambios que hacer, no creo que tenga mucha logica, en su
ventana de busqueda deben de registrar no se tres campos ya
predefinidos, referentes a los campos de una tabla (curriculum) en la
base de datos. Para buscar las coincidencias en todos los campos a la
vez deben de tener algo como:

Select * from Curriculum Where campo1 like '%Valor1%' AND campo2 like
'%Valor2%'

Esto limita la busqueda a que lo buscado aparezca en cada campo de
los registros respectivamente y lo que necesitan creo que es:

Select * from Curriculum Where campo1 like '%Valor1%' OR campo2 like
'%Valor2%'

Es solo una idea, tal vez no entendi bien lo que necesitas, de
cualquier forma espero haberte ayudado.

Valdov
Id Msn Messenger:




"Carlos Balestrini" escribió en
el mensaje news:%
Buenos dias:
Antes que nada les pido desculpas se eu escribo mal pois aunque soy
argentino vivo en Brasil e lamentablemente mezclo as palavras con las
duas lenguas.
Primeiro aclaro que não sei nada de ASP.
Mi pregunta viene al caso que estou asesorando a una empresa que al
mesmo tempo esta fazendo una transformación de su site. El mesmo esta
escrito en ASP.
A empresa é de Recursos Humanos e por consiguiente a base de datos do
mesmo son currículos.
Cada currículo esta conformado por varios campos e diferentes
registros en una base de dados SQL, en diferentes tabelas.
Agora viene la cuestión.
El sistema permite una busca por palavra chave tipo sistema Google.
Una de las opciones es colocar varias palabras e que el sistema busque
el o los currículos que contengan todas esas palabras. Espero hasta
aca que se me haya entendido.
Cual es el problema. O sistema busa en todo el currículo (los
diferentes campos y registros que se le indican por el programa),
currículo por currículo, OK.
Mas solo encuentra con sucesso cuando todas las palabras estan en el
mesmo campo del mismo registro. Es decir, si una palabra esta en un
campo, otra esta en otro campo e quizas en otro registro, etc, no da
sucesso la busca. Solo da sucesso (exito, currículo que cumple la
condición colocada) cuando todas as palavras estão no mesmo campo do
mesmo registro.
O desenvolvedor atual explica na empresa que modificar esto seria
imposible, que provocaria un cambio bastante grande.
El dice que las palavras que uno coloca a buscar, el sistema no las
salva en diferentes variables (matriz o no) y que por eso en el
sistema de busca no se puede ir barriendo palavra por palavra, campo
por campo, registro por registro, para encontrar el sucesso. El
sistema busca las palavras todas juntas. Aclaro que las mismas no
necesariamente deben estar contiguas mas si deben estar en el mismo
campo para dar suceso. Mas no se porque no entiendo las explicaciones
como hace la busca con que tipo de procedimiento.
Antes de hacer la pregunta espero que se me haya entendido e agradeço
a todos los interesados.
Pregunto: en función de lo explicado tiene logica lo que dice el
desarrollador?
Podría ser facil solucionar esto?
Que ideas sugieren para solucionar?

Muchas gracias

Carlos Balestrini

















Respuesta Responder a este mensaje
#8 Carlos Balestrini
14/06/2005 - 16:15 | Informe spam
Valdov:
Desculpa que no haya contestado antes.
No soy un buen conocedor do tema de SQL e nada conozco de ASP. Mas segui tu
recomendación de leer (estudar) el tema de left Outer Join.
Aún no encuentro bien claro el tema de la solución de esta claúsula mas me
doy cuenta que no pareceria ser la mas adecuada.
Mas, outro tema que me preocupa. Como deve fazer para que, una vez gerados
un pacote de registros con toda la información de un currículo (la unión de
las diferentes tablas), la busqueda de las diferentes palabras que coloque
en busca avanzada se haga palabra por palabra en los diferentes campos e
registros e que el suceso (exito) se obtenga no porque todas las palabras
tienen que estar en un mismo campo de un mismos registro sino que que todas
pueden estar en diferentes campos e registros.
Ejemplo: Un currículo esta conformado por diferentes tablas: datos de la
persona (Un registro por persona), Experiencia Profesional (varios registros
por persona), Formación educativa (varios registros por persona), Cursos
(varios registros por persona), Conocimientos de informática (ídem), idiomas
(idem), etc.
Actualmente sólo tengo suceso (exito) cuando todas las palabras se
encuentran en un mismo registro y mismo campo.
Yo le pido al desarrollador que el suceso (exito) se produzca cuando todas
las palabras se encuentren en el currículo mas pueden estar en diferentes
registros e campos.
El desarrollador nos dice que no se puede porque ve que el cambio seria muy
complicado e llevaria mucho tiempo (es verdad que estas sentencias no las
escribio él). Estamos muy atrasados en el lanzamiento del site y por eso
estamos con miedo de insistir mas creemos que su comentario no tiene mucha
lógica. Puede ser cierto su comentario? En tu rápida visión pensas lo mismo?
Igualmente, no te quiero complicar la vida. se que estos foros son para
ayudar a otros mas se que todos tenemos tiempos limitados. Por eso,
igualmente te agradezco a vos como a Nuno Santos que antes tambien respondio
y a todos los que me leyeron.
Muchas Gracias

Carlos
"Valdov" escreveu na mensagem
news:
Carlos:

Asi dandole una revisada rápida, creo que si la va a tener mas
complicada tu desarrollador, porque lo que te comentaba acerca del Like,
esta bien suplantado por Contains, para mi el error asi sin meterme muy a
fondo no va en la clausula Where sino en los Left Outer Join.

Dale una revisada a este enlace o busca en google sobre el tema (este
esta en español):

http://www.vhfdx.net/docsql_e.html#union
Valdov
Id Msn Messenger:




"Carlos Balestrini" escribió en el
mensaje news:
Voldov e Nuno Santos:
Desculpem os demais que mencione a ellos mas são os que respondieron. Mas
esta consulta es para quien me possa ajudar.

Pido desculpas se o que coloco ahora es muito largo. Aceito todas as
criticas e cuestionamentos porque entiendo que haya personas que tem
conexión por Dial-up e les cueste baixar este e-mail.
Mas aqui transcrivo as sentencias da busqueda que me envio el
desarrollador. Eu entiendo poco das mesmas, mas talvez vocês possam
indicar onde pode ser incluidas o melhoradas as sentencias que indicaron.
Muchas Gracias a todos

Carlos Balestrini
ALTER procedure dbo.sp_busca_avancada_c @p1 varchar(1000),

@p2 varchar(1000), @p3 varchar(1000), @p4 varchar(1000)


as

begin


declare @v_sqlstmt varchar(8000)

set @v_sqlstmt = 'select a.nome, a.sobrenome,a.id_candidato,'+

' a.qualificacoes_desc,
a.cidade,a.cliente_emp,a.status_candidato, '+

' a.desc_func_e_c,a.areas_proc_c,a.cargos_proc_c, a.uf from '+

' tb_candidato a

where a.id_candidato > 0 '



if @p1 <> ''

begin

if patindex('%and%', @p1) = 0

begin

set @v_sqlstmt = @v_sqlstmt +

'and

(

contains(a.*,'''+@p1 +''')
'+

' or a.id_candidato in
(select e.id_candidato from '+

' tb_formacao e where
contains(e.*,'''+@p1+

''') and e.nome_curso <> '''')

or a.id_candidato in ' +

' (select f.id_candidato from
tb_curso_comp f where '+

' contains(f.*,'''+@p1+'''))

or a.id_candidato in ' +

' (select g.id_candidato from
tb_exp_pro g left outer join '+

' tb_area_prof h on
g.cod_area = h.cod_area left outer join '+

' tb_cargo i on g.cod_cargo
= i.cod_cargo where '+

' contains(g.*,'''+@p1+''')

or
contains(h.*,'''+@p1+''') '+

' or
contains(i.*,'''+@p1+'''))

or a.id_candidato in '+

' (select b.id_candidato from
tb_vaga_proc b left outer join '+

' tb_area_prof c on
b.cod_area = c.cod_area left outer join '+

' tb_cargo d on b.cod_cargo =
d.cod_cargo where '+

' contains(b.*,'''+@p1+''')or
contains(c.*,'''+@p1+''')'+

' or
contains(d.*,'''+@p1+'''))

) '

end

else

begin

declare @v_pos_ini int, @v_pos_fim
int, @v_chr as char(1), @v_cont int, @v_str varchar(8000), @v_p1
varchar(8000)

set @v_p1 =
ltrim(rtrim(replace(@p1,'and','')))

set @v_pos_ini = 0

set @v_pos_fim = 0

set @v_chr = ''

set @v_str = ''

set @v_cont = 1

while @v_cont <= len(@v_p1)

begin

if substring(@v_p1,
@v_cont, 1) <> ' '

begin

set @v_str =
@v_str + substring(@v_p1, @v_cont, 1)

end

else

begin

if @v_str <>
''

begin

set
@v_sqlstmt = @v_sqlstmt +


'and

(


contains(a.*,'''+ @v_str+''') '+

'
or a.id_candidato in (select e.id_candidato from '+

'
tb_formacao e where contains(e.*,'''+ @v_str+


''') and e.nome_curso <> '''')


or a.id_candidato in ' +

'
(select f.id_candidato from tb_curso_comp f where '+

'
contains(f.*,'''+ @v_str+'''))


or a.id_candidato in ' +

'
(select g.id_candidato from tb_exp_pro g left outer join '+

'
tb_area_prof h on g.cod_area = h.cod_area left outer join '+

'
tb_cargo i on g.cod_cargo = i.cod_cargo where '+

'
contains(g.*,'''+ @v_str+''')


or contains(h.*,'''+ @v_str+''') '+

'
or contains(i.*,'''+ @v_str+'''))


or a.id_candidato in '+

'
(select b.id_candidato from tb_vaga_proc b left outer join '+

'
tb_area_prof c on b.cod_area = c.cod_area left outer join '+

'
tb_cargo d on b.cod_cargo = d.cod_cargo where '+

'
contains(b.*,'''+ @v_str+''')or contains(c.*,'''+ @v_str+''')'+

'
or contains(d.*,'''+ @v_str+'''))



) '

end

set @v_str =
''



end



set @v_cont = @v_cont + 1

end

if @v_str <> ''

begin

set @v_sqlstmt
= @v_sqlstmt +

'and

(


contains(a.*,'''+ @v_str+''') '+

' or
a.id_candidato in (select e.id_candidato from '+

' tb_formacao e
where contains(e.*,'''+ @v_str+

''') and
e.nome_curso <> '''')

or
a.id_candidato in ' +

' (select
f.id_candidato from tb_curso_comp f where '+

'
contains(f.*,'''+ @v_str+'''))

or
a.id_candidato in ' +

' (select
g.id_candidato from tb_exp_pro g left outer join '+

' tb_area_prof
h on g.cod_area = h.cod_area left outer join '+

' tb_cargo i on
g.cod_cargo = i.cod_cargo where '+

'
contains(g.*,'''+ @v_str+''')

or
contains(h.*,'''+ @v_str+''') '+

' or
contains(i.*,'''+ @v_str+'''))

or
a.id_candidato in '+

' (select
b.id_candidato from tb_vaga_proc b left outer join '+

' tb_area_prof
c on b.cod_area = c.cod_area left outer join '+

' tb_cargo d on
b.cod_cargo = d.cod_cargo where '+

'
contains(b.*,'''+ @v_str+''')or contains(c.*,'''+ @v_str+''')'+

' or
contains(d.*,'''+ @v_str+'''))



) '

end

end

end


if @p2 <> ''

begin

set @v_sqlstmt = @v_sqlstmt +

'and

(

contains(a.*,'''+@p2 +''') '+

' or a.id_candidato in (select
e.id_candidato from '+

' tb_formacao e where
contains(e.*,'''+@p2+

''') and e.nome_curso <> '''')

or a.id_candidato in ' +

' (select f.id_candidato from
tb_curso_comp f where '+

' contains(f.*,'''+@p2+'''))

or a.id_candidato in ' +

' (select g.id_candidato from tb_exp_pro
g left outer join '+

' tb_area_prof h on g.cod_area =
h.cod_area left outer join '+

' tb_cargo i on g.cod_cargo =
i.cod_cargo where '+

' contains(g.*,'''+@p2+''')

or contains(h.*,'''+@p2+''') '+

' or contains(i.*,'''+@p2+'''))

or a.id_candidato in '+

' (select b.id_candidato from
tb_vaga_proc b left outer join '+

' tb_area_prof c on b.cod_area =
c.cod_area left outer join '+

' tb_cargo d on b.cod_cargo =
d.cod_cargo where '+

' contains(b.*,'''+@p2+''')or
contains(c.*,'''+@p2+''')'+

' or contains(d.*,'''+@p2+'''))



) '

end


if @p3 <> ''

begin

set @v_sqlstmt = @v_sqlstmt +



'and

(

contains(a.*,'''+@p3 +''') '+

' or a.id_candidato in (select
e.id_candidato from '+

' tb_formacao e where
contains(e.*,'''+@p3+

''') and e.nome_curso <> '''')

or a.id_candidato in ' +

' (select f.id_candidato from
tb_curso_comp f where '+

' contains(f.*,'''+@p3+'''))

or a.id_candidato in ' +

' (select g.id_candidato from tb_exp_pro
g left outer join '+

' tb_area_prof h on g.cod_area =
h.cod_area left outer join '+

' tb_cargo i on g.cod_cargo =
i.cod_cargo where '+

' contains(g.*,'''+@p3+''')

or contains(h.*,'''+@p3+''') '+

' or contains(i.*,'''+@p3+'''))

or a.id_candidato in '+

' (select b.id_candidato from
tb_vaga_proc b left outer join '+

' tb_area_prof c on b.cod_area =
c.cod_area left outer join '+

' tb_cargo d on b.cod_cargo =
d.cod_cargo where '+

' contains(b.*,'''+@p3+''')or
contains(c.*,'''+@p3+''')'+

' or contains(d.*,'''+@p3+'''))

) '

end


if @p4 <> ''

begin

declare @v_p4 varchar(8000)

set @v_p4 = replace( @p4 , ' and ', ' or ')

set @v_sqlstmt = @v_sqlstmt +

'and

(

not contains(a.*,'''+@v_p4 +''') '+

' and a.id_candidato not in (select
e.id_candidato from '+

' tb_formacao e where
contains(e.*,'''+@v_p4+

'''))

and a.id_candidato not in ' +

' (select f.id_candidato from
tb_curso_comp f where '+

' contains(f.*,'''+@v_p4+'''))

and a.id_candidato not in ' +

' (select g.id_candidato from tb_exp_pro
g left outer join '+

' tb_area_prof h on g.cod_area =
h.cod_area left outer join '+

' tb_cargo i on g.cod_cargo =
i.cod_cargo where '+

' contains(g.*,'''+@v_p4+''')

or contains(h.*,'''+@v_p4+''') '+

' or contains(i.*,'''+@v_p4+'''))

and a.id_candidato not in '+

' (select b.id_candidato from
tb_vaga_proc b left outer join '+

' tb_area_prof c on b.cod_area =
c.cod_area left outer join '+

' tb_cargo d on b.cod_cargo =
d.cod_cargo where '+

' contains(b.*,'''+@v_p4+''') or
contains(c.*,'''+@v_p4+''')'+

' or contains(d.*,'''+@v_p4+'''))

) '

end

set @v_sqlstmt = @v_sqlstmt +

' order by convert(int,a.status_candidato) desc , ' +

' a.nome,a.sobrenome asc , a.data_cadastro desc '

execute(@v_sqlstmt)

end


"Valdov" escreveu na mensagem
news:
: D

tal vez con mas detalles o si existe algun lugar donde podamos ver el
sitio podriamos ayudarte mejor, ya que no solo lo imaginariamos.

Valdov
Id Msn Messenger:




"Carlos Balestrini" escribió en el
mensaje news:%
Valdov, muchas gracias.

Yo no entiendo de ASP como explique. Conozco Access (VBA) e algo de VB
porque fiz trabajos con eles.
Mas, me siento tranquilo con tu comentario porque acho que tiene
solução e si no é este desenvolvedor habra otro que lo podera fazer.
Estamos en los ultimos pasos para colocar esta versão no ar e já se
tiene previsto iniciar una nueva etapa con mas mejoras. Yo estoy en la
duda y eso expreso en la empresa si este desenvolvedor es el adecuado.
Agora queria y quiero ideas de como solucionar esto porque seria mucho
mejor ya poder colocar esto en esta versión.

Nuevamente muchas gracias a vos como a todos los que han leido mi
e-mail.

Veo que sos de México. Yo trabajé en México en el año 93 y la pase muy
bien, tengo muy buenos recuerdos. Viví en DF, Veracruz e Villa Hermosa.

Carlos Balestrini

"Valdov" escreveu na mensagem
news:%
Hola:

Si entendi bien, el desarrollador dice que seria imposible o muy
grandes los cambios que hacer, no creo que tenga mucha logica, en su
ventana de busqueda deben de registrar no se tres campos ya
predefinidos, referentes a los campos de una tabla (curriculum) en la
base de datos. Para buscar las coincidencias en todos los campos a la
vez deben de tener algo como:

Select * from Curriculum Where campo1 like '%Valor1%' AND campo2 like
'%Valor2%'

Esto limita la busqueda a que lo buscado aparezca en cada campo de
los registros respectivamente y lo que necesitan creo que es:

Select * from Curriculum Where campo1 like '%Valor1%' OR campo2 like
'%Valor2%'

Es solo una idea, tal vez no entendi bien lo que necesitas, de
cualquier forma espero haberte ayudado.

Valdov
Id Msn Messenger:




"Carlos Balestrini" escribió en
el mensaje news:%
Buenos dias:
Antes que nada les pido desculpas se eu escribo mal pois aunque soy
argentino vivo en Brasil e lamentablemente mezclo as palavras con las
duas lenguas.
Primeiro aclaro que não sei nada de ASP.
Mi pregunta viene al caso que estou asesorando a una empresa que al
mesmo tempo esta fazendo una transformación de su site. El mesmo esta
escrito en ASP.
A empresa é de Recursos Humanos e por consiguiente a base de datos do
mesmo son currículos.
Cada currículo esta conformado por varios campos e diferentes
registros en una base de dados SQL, en diferentes tabelas.
Agora viene la cuestión.
El sistema permite una busca por palavra chave tipo sistema Google.
Una de las opciones es colocar varias palabras e que el sistema
busque el o los currículos que contengan todas esas palabras. Espero
hasta aca que se me haya entendido.
Cual es el problema. O sistema busa en todo el currículo (los
diferentes campos y registros que se le indican por el programa),
currículo por currículo, OK.
Mas solo encuentra con sucesso cuando todas las palabras estan en el
mesmo campo del mismo registro. Es decir, si una palabra esta en un
campo, otra esta en otro campo e quizas en otro registro, etc, no da
sucesso la busca. Solo da sucesso (exito, currículo que cumple la
condición colocada) cuando todas as palavras estão no mesmo campo do
mesmo registro.
O desenvolvedor atual explica na empresa que modificar esto seria
imposible, que provocaria un cambio bastante grande.
El dice que las palavras que uno coloca a buscar, el sistema no las
salva en diferentes variables (matriz o no) y que por eso en el
sistema de busca no se puede ir barriendo palavra por palavra, campo
por campo, registro por registro, para encontrar el sucesso. El
sistema busca las palavras todas juntas. Aclaro que las mismas no
necesariamente deben estar contiguas mas si deben estar en el mismo
campo para dar suceso. Mas no se porque no entiendo las explicaciones
como hace la busca con que tipo de procedimiento.
Antes de hacer la pregunta espero que se me haya entendido e agradeço
a todos los interesados.
Pregunto: en función de lo explicado tiene logica lo que dice el
desarrollador?
Podría ser facil solucionar esto?
Que ideas sugieren para solucionar?

Muchas gracias

Carlos Balestrini





















email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida