Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- CREATE OR REPLACE FUNCTION similares(id_anuncio VARCHAR(255), id_transaccion INTEGER, id_categoriaPropiedad INTEGER,
- ubicacion_id INTEGER, id_distrito INTEGER, id_Canton INTEGER,
- id_Provincia INTEGER, tipo_cambio DOUBLE PRECISION, limite INTEGER)
- RETURNS SETOF anuncio_similar AS $$
- DECLARE
- tmpanuncio anuncio_similar;
- tmprecord RECORD;
- BEGIN
- CREATE TEMP TABLE tmp_table_sort
- (
- "id_Anuncio" character varying(255),
- "CadenaActivacion" character varying(150),
- "Titulo" character varying(45),
- "id_Transaccion" INTEGER,
- "id_CategoriaPropiedad" INTEGER,
- "id_Distrito" INTEGER,
- "DireccionOtrasSenias" character varying(300),
- "Precio" double precision,
- "id_Moneda" INTEGER,
- "Descripcion_es" character varying(1000),
- "Descripcion_en" character varying(1000),
- "Resaltado" BOOLEAN,
- "NombreContacto" character varying(50),
- "TelefonoContacto" character varying(30),
- "EmailContacto" character varying(50),
- "CelContacto" character varying(30),
- "Password" character varying(50),
- visitas INTEGER,
- "Idioma" character varying(3),
- "Vendido" BOOLEAN,
- "Activado" BOOLEAN,
- "Notificado" BOOLEAN,
- "FechaCreacion" TIMESTAMP without TIME ZONE,
- "FechaUltimaActualizacion" TIMESTAMP without TIME ZONE,
- "FechaVendido" TIMESTAMP without TIME ZONE,
- "FechaUltimaNotificacion" TIMESTAMP without TIME ZONE,
- "m2Terreno" INTEGER,
- "m2Construccion" INTEGER,
- "tc" INTEGER,
- "ub" INTEGER,
- "Recamaras" character varying(3),
- "Banios" character varying(3),
- "Niveles" character varying(3),
- "Garajes" character varying(3),
- "TieneVideo" BOOLEAN,
- "VideoId" character varying(500),
- coordenadas character varying(255),
- mapzoom character varying(255) NOT NULL,
- "ProcesandoVideo" BOOLEAN,
- "id_OpcionItem" INTEGER,
- "FraseEspecial" INTEGER,
- NombreProvincia character varying(255),
- "id_Provincia" INTEGER,
- NombreCanton character varying(255),
- "id_Canton" INTEGER,
- NombreDistrito character varying(255),
- CaterogiaNombreEs character varying(255),
- CaterogiaNombreEn character varying(255),
- precioTitulo character varying(20),
- prioridad FLOAT
- )
- ON COMMIT DROP;
- INSERT INTO tmp_table_sort
- SELECT DISTINCT ON (a."id_Anuncio") a.*, p."Nombre" AS NombreProvincia, p."id_Provincia",
- c."Nombre" AS NombreCanton, c."id_Canton", d."Nombre" AS NombreDistrito,
- cat."Nombre_es" AS CaterogiaNombreEs,cat."Nombre_en" AS CaterogiaNombreEn,
- CASE WHEN a."id_Moneda" = 2 THEN TO_CHAR(a."Precio" * tipo_cambio, '₡99,999,999,999.99')
- ELSE TO_CHAR(a."Precio" / tipo_cambio, '$999,999,999.99') END AS precioTitulo,
- (CASE WHEN a."id_Transaccion" = id_Transaccion THEN 2 ELSE 1 END *
- CASE WHEN a."id_CategoriaPropiedad" = id_CategoriaPropiedad THEN 8 ELSE 1 END *
- CASE WHEN
- CASE WHEN a."id_Moneda" = 2 THEN a."Precio" * tipo_cambio ELSE a."Precio" END
- BETWEEN
- (CASE WHEN a."id_Moneda" = 2 THEN a."Precio" * tipo_cambio ELSE a."Precio" END - 1000000)
- AND
- (CASE WHEN a."id_Moneda" = 2 THEN a."Precio" * tipo_cambio ELSE a."Precio" END + 1000000)
- THEN 1.5 ELSE 1 END *
- CASE WHEN a."ubicacion_id" = ubicacion_id THEN 1.5 ELSE 1 END *
- CASE WHEN d."id_Distrito" = id_distrito THEN 3 ELSE
- CASE WHEN c."id_Canton" = id_Canton THEN 2.5 ELSE
- CASE WHEN p."id_Provincia" = id_Provincia THEN 2 ELSE 1 END
- END
- END
- ) AS prioridad
- FROM anuncios a
- INNER JOIN distritos d ON (a."id_Distrito" = d."id_Distrito")
- INNER JOIN cantons c ON (d."id_Canton" = c."id_Canton")
- INNER JOIN provincias p ON (c."id_Provincia" = p."id_Provincia")
- INNER JOIN categoriapropiedads cat ON (cat."id_CategoriaPropiedad" = a."id_CategoriaPropiedad")
- LEFT OUTER JOIN caracteristica_xanuncios cxa ON (cxa."id_Anuncio" = a."id_Anuncio")
- WHERE
- a."Activado" = TRUE AND
- CASE WHEN id_anuncio <> '' THEN
- a."id_Anuncio" <> id_anuncio
- ELSE TRUE END
- AND
- ( CASE WHEN id_transaccion <> 0 THEN a."id_Transaccion" = id_transaccion ELSE TRUE END OR
- CASE WHEN id_transaccion <> 0 THEN a."id_CategoriaPropiedad" = id_categoriaPropiedad ELSE TRUE END );
- FOR tmprecord IN EXECUTE('SELECT * FROM tmp_table_sort ORDER BY prioridad DESC LIMIT ' || limite)
- LOOP
- tmpanuncio.id_Anuncio := tmprecord."id_Anuncio";
- tmpanuncio.CadenaActivacion := tmprecord."CadenaActivacion";
- tmpanuncio.Titulo := tmprecord."Titulo";
- tmpanuncio.id_Transaccion := tmprecord."id_Transaccion";
- tmpanuncio.id_CategoriaPropiedad := tmprecord."id_CategoriaPropiedad";
- tmpanuncio.DireccionOtrasSenias := tmprecord."DireccionOtrasSenias";
- tmpanuncio.Precio := tmprecord."Precio";
- tmpanuncio.id_Moneda := tmprecord."id_Moneda";
- tmpanuncio.Descripcion_es := tmprecord."Descripcion_es";
- tmpanuncio.Descripcion_en := tmprecord."Descripcion_en";
- tmpanuncio.Resaltado := tmprecord."Resaltado";
- tmpanuncio.NombreContacto := tmprecord."NombreContacto";
- tmpanuncio.TelefonoContacto := tmprecord."TelefonoContacto";
- tmpanuncio.EmailContacto := tmprecord."EmailContacto";
- tmpanuncio.CelContacto := tmprecord."CelContacto";
- tmpanuncio.Password := tmprecord."Password";
- tmpanuncio.visitas := tmprecord."visitas";
- tmpanuncio.Idioma := tmprecord."Idioma";
- tmpanuncio.Vendido := tmprecord."Vendido";
- tmpanuncio.Activado := tmprecord."Activado";
- tmpanuncio.Notificado := tmprecord."Notificado";
- tmpanuncio.FechaCreacion := tmprecord."FechaCreacion";
- tmpanuncio.FechaUltimaActualizacion := tmprecord."FechaUltimaActualizacion";
- tmpanuncio.FechaVendido := tmprecord."FechaVendido";
- tmpanuncio.FechaUltimaNotificacion := tmprecord."FechaUltimaNotificacion";
- tmpanuncio.m2Terreno := tmprecord."m2Terreno";
- tmpanuncio.m2Construccion := tmprecord."m2Construccion";
- tmpanuncio.tipoconstruccion_id := tmprecord."tc";
- tmpanuncio.ubicacion_id := tmprecord."ub";
- tmpanuncio.Recamaras := tmprecord."Recamaras";
- tmpanuncio.Banios := tmprecord."Banios";
- tmpanuncio.Niveles := tmprecord."Niveles";
- tmpanuncio.Garajes := tmprecord."Garajes";
- tmpanuncio.TieneVideo := tmprecord."TieneVideo";
- tmpanuncio.VideoId := tmprecord."VideoId";
- tmpanuncio.coordenadas := tmprecord."coordenadas";
- tmpanuncio.mapzoom := tmprecord."mapzoom";
- tmpanuncio.ProcesandoVideo := tmprecord."ProcesandoVideo";
- tmpanuncio.id_OpcionItem := tmprecord."id_OpcionItem";
- tmpanuncio.FraseEspecial := tmprecord."FraseEspecial";
- tmpanuncio.NombreProvincia := tmprecord.NombreProvincia;
- tmpanuncio.id_Provincia := tmprecord."id_Provincia";
- tmpanuncio.NombreCanton := tmprecord.NombreCanton;
- tmpanuncio.id_Canton := tmprecord."id_Canton";
- tmpanuncio.NombreDistrito := tmprecord.NombreDistrito;
- tmpanuncio.id_Distrito := tmprecord."id_Distrito";
- tmpanuncio.Prioridad := tmprecord.prioridad;
- tmpanuncio.CaterogiaNombreEs := tmprecord.CaterogiaNombreEs;
- tmpanuncio.CaterogiaNombreEN := tmprecord.CaterogiaNombreEN;
- tmpanuncio.precioTitulo := tmprecord.precioTitulo;
- SELECT INTO tmpanuncio.primeraImagen "id" FROM imagens WHERE "id_Anuncio" = tmprecord."id_Anuncio" ORDER BY "id" limit 1;
- RETURN NEXT tmpanuncio;
- END LOOP;
- RETURN;
- END;
- $$ LANGUAGE plpgsql;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement