From: | Sebastián Villalba <sebastian(at)fcm(dot)unc(dot)edu(dot)ar> |
---|---|
To: | rmero(at)marzam-online(dot)com,pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Re: Ayuda con base de datos de busquedas |
Date: | 2006-09-25 23:04:14 |
Message-ID: | 20060925225654.M15266@fcm.unc.edu.ar |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
On Mon, 25 Sep 2006 16:41:25 -0500, Raúl Mero Moreira wrote
> me encantaria sabes si me la hicieras llegar
Aquí te la mando. ;)
> bueno la forma de como hacer el buscador no era la repuesta pero es
> el 50% que me haz alivianado claro que si es mejorado te hare llegar
> eso tambien
Me encantaría!. Seguramente que se puede mejorar bastante.
> en si lo que queria saber es como tengo que estructurar la base de
> datos, que tan factible es alzar el codigo o si ya lo haz hecho,
> espero que me entiendas
¿Te refieres a la estructura de las tablas?. ¿Qué se entiende por "que tan
factible es alzar el código"?. Perdón pero sinceramente no entiendo bien eso.
Saludos...
------------
CREATE OR REPLACE FUNCTION buscador(varchar, integer, char(2), varchar)
RETURNS SETOF busqueda AS $$
DECLARE
result RECORD;
sql varchar := 'SELECT DISTINCT p.id, t.id, p.foto, p.apellido, p.nombre,
p.email, a.nombre, pa.nombre, p.universidad_trabaja, t.tema, t.recursos, t.trans
ferencia, t.productos, t.links FROM persona p, pais pa, trabajo t, area a WHERE';
num_arg int := 0;
BEGIN
IF $1 != '' THEN
num_arg := num_arg + 1;
sql := sql || ' ((p.apellido ILIKE \'%'||$1||'%\') OR (p.nombre ILIKE
\'%'||$1||'%\')) AND p.id = t.persona_id AND p.pais = pa.codigo AND t.area_id = a.
id AND p.publicado = \'t\'';
END IF;
IF $2 > 0 THEN
IF num_arg > 0 THEN
sql := sql || ' AND a.id = '||$2;
num_arg := num_arg + 1;
ELSE
sql := sql || ' p.id = t.persona_id AND t.area_id = '||$2||' AND p.pais
= pa.codigo AND t.area_id = a.id AND p.publicado = \'t\'';
num_arg := num_arg + 1;
END IF;
END IF;
IF $3 != '' THEN
IF num_arg > 0 THEN
sql := sql || ' AND pa.codigo = \''||$3||'\'';
num_arg := num_arg + 1;
ELSE
sql := sql || ' pa.codigo = \''||$3||'\' AND pa.codigo = p.pais AND p.id
= t.persona_id AND t.area_id = a.id AND p.publicado = \'t\'';
num_arg := num_arg + 1;
END IF;
END IF;
IF $4 != '' THEN
IF num_arg > 0 THEN
sql := sql || ' AND p.universidad_trabaja ILIKE \'%'||$4||'%\'';
num_arg := num_arg + 1;
ELSE
sql := sql || ' p.universidad_trabaja ILIKE \'%'||$4||'%\' AND p.id =
t.persona_id AND t.area_id = a.id AND p.pais = pa.codigo AND p.publicado = \'t\'
';
num_arg := num_arg + 1;
END IF;
END IF;
IF num_arg > 0 THEN
sql := sql || ' ORDER BY 4, 5, 7, 8;';
ELSE
sql := 'SELECT DISTINCT p.id, t.id, p.foto, p.apellido, p.nombre, p.email,
a.nombre, pa.nombre, p.universidad_trabaja, t.tema, t.recursos, t.transferenc
ia, t.productos, t.links FROM persona p, pais pa, trabajo t, area a WHERE
p.publicado = \'t\' AND p.id = t.persona_id AND p.pais = pa.codigo AND t.area_id =
a.id ORDER BY 4, 5, 7, 8';
END IF;
FOR result IN EXECUTE sql LOOP
RETURN NEXT result;
END LOOP;
RETURN;
END;
$$ LANGUAGE plpgsql STABLE SECURITY DEFINER;
------------
> gracias
De nada amigo...
p/d: no te olvides que ahí figura con los nombres de mis tablas y mis campos.
-
-------------------------------------------
Sebastián Villalba
sebastian(at)fcm(dot)unc(dot)edu(dot)ar
-------------------------------------------
From | Date | Subject | |
---|---|---|---|
Next Message | obed | 2006-09-25 23:39:39 | Re: Rv: Re: tabla corrupta |
Previous Message | jose ricardo | 2006-09-25 23:01:17 | Rv: Re: tabla corrupta |