Advertisement
Guest User

Untitled

a guest
Jun 22nd, 2017
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 7.06 KB | None | 0 0
  1.  
  2. CREATE OR REPLACE FUNCTION similares(id_anuncio VARCHAR(255), id_transaccion INTEGER, id_categoriaPropiedad INTEGER,
  3.     ubicacion_id INTEGER, id_distrito INTEGER, id_Canton INTEGER,
  4.     id_Provincia INTEGER, tipo_cambio DOUBLE PRECISION, limite INTEGER)
  5. RETURNS SETOF anuncio_similar AS $$
  6. DECLARE
  7. tmpanuncio anuncio_similar;
  8. tmprecord RECORD;
  9. BEGIN
  10.  
  11.     CREATE TEMP TABLE tmp_table_sort
  12.             (
  13.   "id_Anuncio" character varying(255),
  14.   "CadenaActivacion" character varying(150),
  15.   "Titulo" character varying(45),
  16.   "id_Transaccion" INTEGER,
  17.   "id_CategoriaPropiedad" INTEGER,
  18.   "id_Distrito" INTEGER,
  19.   "DireccionOtrasSenias" character varying(300),
  20.   "Precio" double precision,
  21.   "id_Moneda" INTEGER,
  22.   "Descripcion_es" character varying(1000),
  23.   "Descripcion_en" character varying(1000),
  24.   "Resaltado" BOOLEAN,
  25.   "NombreContacto" character varying(50),
  26.   "TelefonoContacto" character varying(30),
  27.   "EmailContacto" character varying(50),
  28.   "CelContacto" character varying(30),
  29.   "Password" character varying(50),
  30.   visitas INTEGER,
  31.   "Idioma" character varying(3),
  32.   "Vendido" BOOLEAN,
  33.   "Activado" BOOLEAN,
  34.   "Notificado" BOOLEAN,
  35.   "FechaCreacion" TIMESTAMP without TIME ZONE,
  36.   "FechaUltimaActualizacion" TIMESTAMP without TIME ZONE,
  37.   "FechaVendido" TIMESTAMP without TIME ZONE,
  38.   "FechaUltimaNotificacion" TIMESTAMP without TIME ZONE,
  39.   "m2Terreno" INTEGER,
  40.   "m2Construccion" INTEGER,
  41.   "tc" INTEGER,
  42.   "ub" INTEGER,
  43.   "Recamaras" character varying(3),
  44.   "Banios" character varying(3),
  45.   "Niveles" character varying(3),
  46.   "Garajes" character varying(3),
  47.   "TieneVideo" BOOLEAN,
  48.   "VideoId" character varying(500),
  49.   coordenadas character varying(255),
  50.   mapzoom character varying(255) NOT NULL,
  51.   "ProcesandoVideo" BOOLEAN,
  52.   "id_OpcionItem" INTEGER,
  53.   "FraseEspecial" INTEGER,
  54.   NombreProvincia character varying(255),
  55.   "id_Provincia" INTEGER,
  56.   NombreCanton character varying(255),
  57.   "id_Canton" INTEGER,
  58.   NombreDistrito character varying(255),
  59.   CaterogiaNombreEs character varying(255),
  60.   CaterogiaNombreEn character varying(255),
  61.   precioTitulo character varying(20),
  62.   prioridad FLOAT
  63.   )
  64.         ON COMMIT DROP;
  65.     INSERT INTO tmp_table_sort
  66.         SELECT DISTINCT ON (a."id_Anuncio") a.*, p."Nombre" AS NombreProvincia, p."id_Provincia",
  67.             c."Nombre" AS NombreCanton, c."id_Canton", d."Nombre" AS NombreDistrito,
  68.             cat."Nombre_es" AS CaterogiaNombreEs,cat."Nombre_en" AS CaterogiaNombreEn,
  69.             CASE WHEN a."id_Moneda" = 2 THEN TO_CHAR(a."Precio" * tipo_cambio, '₡99,999,999,999.99')
  70.             ELSE TO_CHAR(a."Precio" / tipo_cambio, '$999,999,999.99') END AS precioTitulo,
  71.             (CASE WHEN a."id_Transaccion" = id_Transaccion THEN 2 ELSE 1 END *
  72.              CASE WHEN a."id_CategoriaPropiedad" = id_CategoriaPropiedad THEN 8 ELSE 1 END *
  73.              CASE WHEN
  74.                 CASE WHEN a."id_Moneda" = 2 THEN a."Precio" * tipo_cambio ELSE a."Precio" END
  75.                 BETWEEN
  76.                     (CASE WHEN a."id_Moneda" = 2 THEN a."Precio" * tipo_cambio ELSE a."Precio" END - 1000000)
  77.                 AND
  78.                     (CASE WHEN a."id_Moneda" = 2 THEN a."Precio" * tipo_cambio ELSE a."Precio" END + 1000000)
  79.                 THEN 1.5 ELSE 1 END *
  80.              CASE WHEN a."ubicacion_id" = ubicacion_id THEN 1.5 ELSE 1 END *
  81.              CASE WHEN d."id_Distrito" = id_distrito THEN 3 ELSE
  82.                 CASE WHEN c."id_Canton" = id_Canton THEN 2.5 ELSE
  83.                     CASE WHEN p."id_Provincia" = id_Provincia THEN 2 ELSE 1 END
  84.                 END
  85.             END
  86.       ) AS prioridad
  87.         FROM anuncios a
  88.             INNER JOIN distritos d ON (a."id_Distrito" = d."id_Distrito")
  89.             INNER JOIN cantons c ON (d."id_Canton" = c."id_Canton")
  90.             INNER JOIN provincias p ON (c."id_Provincia" = p."id_Provincia")
  91.             INNER JOIN categoriapropiedads cat ON (cat."id_CategoriaPropiedad" = a."id_CategoriaPropiedad")
  92.             LEFT OUTER JOIN caracteristica_xanuncios cxa ON (cxa."id_Anuncio" = a."id_Anuncio")
  93.         WHERE
  94.             a."Activado" = TRUE AND
  95.             CASE WHEN id_anuncio <> '' THEN
  96.                 a."id_Anuncio" <> id_anuncio
  97.                 ELSE TRUE END
  98.             AND
  99.                 ( CASE WHEN id_transaccion <> 0 THEN a."id_Transaccion" = id_transaccion ELSE TRUE END OR
  100.                   CASE WHEN id_transaccion <> 0 THEN a."id_CategoriaPropiedad" = id_categoriaPropiedad ELSE TRUE END );
  101.  
  102.     FOR tmprecord IN EXECUTE('SELECT * FROM tmp_table_sort ORDER BY prioridad DESC LIMIT ' || limite)
  103.     LOOP
  104.         tmpanuncio.id_Anuncio := tmprecord."id_Anuncio";
  105.         tmpanuncio.CadenaActivacion := tmprecord."CadenaActivacion";
  106.         tmpanuncio.Titulo := tmprecord."Titulo";
  107.         tmpanuncio.id_Transaccion := tmprecord."id_Transaccion";
  108.         tmpanuncio.id_CategoriaPropiedad := tmprecord."id_CategoriaPropiedad";
  109.         tmpanuncio.DireccionOtrasSenias := tmprecord."DireccionOtrasSenias";
  110.         tmpanuncio.Precio := tmprecord."Precio";
  111.         tmpanuncio.id_Moneda := tmprecord."id_Moneda";
  112.         tmpanuncio.Descripcion_es := tmprecord."Descripcion_es";
  113.         tmpanuncio.Descripcion_en := tmprecord."Descripcion_en";
  114.         tmpanuncio.Resaltado := tmprecord."Resaltado";
  115.         tmpanuncio.NombreContacto := tmprecord."NombreContacto";
  116.         tmpanuncio.TelefonoContacto := tmprecord."TelefonoContacto";
  117.         tmpanuncio.EmailContacto := tmprecord."EmailContacto";
  118.         tmpanuncio.CelContacto := tmprecord."CelContacto";
  119.         tmpanuncio.Password := tmprecord."Password";
  120.         tmpanuncio.visitas := tmprecord."visitas";
  121.         tmpanuncio.Idioma := tmprecord."Idioma";
  122.         tmpanuncio.Vendido := tmprecord."Vendido";
  123.         tmpanuncio.Activado := tmprecord."Activado";
  124.         tmpanuncio.Notificado := tmprecord."Notificado";
  125.         tmpanuncio.FechaCreacion := tmprecord."FechaCreacion";
  126.         tmpanuncio.FechaUltimaActualizacion := tmprecord."FechaUltimaActualizacion";
  127.         tmpanuncio.FechaVendido := tmprecord."FechaVendido";
  128.         tmpanuncio.FechaUltimaNotificacion := tmprecord."FechaUltimaNotificacion";
  129.         tmpanuncio.m2Terreno := tmprecord."m2Terreno";
  130.         tmpanuncio.m2Construccion := tmprecord."m2Construccion";
  131.         tmpanuncio.tipoconstruccion_id := tmprecord."tc";
  132.         tmpanuncio.ubicacion_id := tmprecord."ub";
  133.         tmpanuncio.Recamaras := tmprecord."Recamaras";
  134.         tmpanuncio.Banios := tmprecord."Banios";
  135.         tmpanuncio.Niveles := tmprecord."Niveles";
  136.         tmpanuncio.Garajes := tmprecord."Garajes";
  137.         tmpanuncio.TieneVideo := tmprecord."TieneVideo";
  138.         tmpanuncio.VideoId := tmprecord."VideoId";
  139.         tmpanuncio.coordenadas := tmprecord."coordenadas";
  140.         tmpanuncio.mapzoom := tmprecord."mapzoom";
  141.         tmpanuncio.ProcesandoVideo := tmprecord."ProcesandoVideo";
  142.         tmpanuncio.id_OpcionItem := tmprecord."id_OpcionItem";
  143.         tmpanuncio.FraseEspecial := tmprecord."FraseEspecial";
  144.         tmpanuncio.NombreProvincia := tmprecord.NombreProvincia;
  145.         tmpanuncio.id_Provincia := tmprecord."id_Provincia";
  146.         tmpanuncio.NombreCanton := tmprecord.NombreCanton;
  147.         tmpanuncio.id_Canton := tmprecord."id_Canton";
  148.         tmpanuncio.NombreDistrito := tmprecord.NombreDistrito;
  149.         tmpanuncio.id_Distrito := tmprecord."id_Distrito";
  150.         tmpanuncio.Prioridad := tmprecord.prioridad;
  151.         tmpanuncio.CaterogiaNombreEs := tmprecord.CaterogiaNombreEs;
  152.         tmpanuncio.CaterogiaNombreEN := tmprecord.CaterogiaNombreEN;
  153.         tmpanuncio.precioTitulo := tmprecord.precioTitulo;
  154.         SELECT INTO tmpanuncio.primeraImagen "id" FROM imagens WHERE "id_Anuncio" = tmprecord."id_Anuncio" ORDER BY "id" limit 1;
  155.         RETURN NEXT tmpanuncio;
  156.     END LOOP;
  157.     RETURN;
  158. END;
  159. $$ LANGUAGE plpgsql;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement