[MySQL] se puede poner macrosustitucion en MySQL

96 views
Skip to first unread message

ZeRoberto

unread,
Apr 28, 2022, 3:25:05 PM4/28/22
to publicesvfoxpro
Hola Foxeros

He creado mi combo multichek que me permite seleccionar una serie de características para luego pasarlo como parametro a una consulta SELECT por medio de una funcion, esta funcion consulta en otra tabla y se obtiene en número de registros que existe

filttro.png

Al momento de seleccionar o marcar los items del combo los códigos se almacenan en una propiedad llamada Value, estos códigos se encuentran almacenados en modo texto separados por comas ejemplo "01,04,07"

Luego son pasados como parámetros de una funcion que me cuenta los códigos por cada habitación

SELECT * FROM tabla WHERE sf_propiedades(HabitacionID, ?lcCodigos) > 0

Mi función almacenada sp_propiedades tiene este código

FUNCTION sp_propiedades(tnHabitacionID, tcLista);
BEGIN
  DECLARE lnResult INTEGER DEFAULT 0;
  SELECT COUNT(*) Cantidad
         FROM habitaciones_dato
         WHERE HabitacionID = tnHabitacionID AND LOCATE(LPAD(PropiedadID, 2, '0'), tcLista) > 0
         INTO lnResult;
RETURN lnResult;
END

Pero el detalle que me doy cuenta es que no me filtra por todas las características en conjunto sino que va buscando las que hay y los añade a la lista, por ejemplo en la imagen inicial las 2 primeras habitaciones tienen AIRE ACOND. pero no INTERNET y la 3 habitacion solo tiene INTERNET y segun la logica no deberia salir ninguno de los 3 por que no cumplen las 2 características. Pero todo esto sucede por este código:

SELECT COUNT(*) Cantidad
         FROM habitaciones_dato
         WHERE HabitacionID = tnHabitacionID AND LOCATE(LPAD(PropiedadID, 2, '0'), tcLista) > 0


Lo que quería saber es si en mySQL se puede trabajar como en fox donde la sentencia lo guardo como cadena, luego le voy añadiendo mas parametros

SELECT COUNT(*) Cantidad
         FROM habitaciones_dato
         WHERE HabitacionID = tnHabitacionID AND 
               LPAD(PropiedadID, 2, '0') = '02' AND
               LPAD(PropiedadID, 2, '0') = '03'

Pero como consigo hacer esto dentro de la función almacenada


Saludos

Ze





Ignacio Debole

unread,
Apr 28, 2022, 3:37:11 PM4/28/22
to publice...@googlegroups.com
hola
    a mi entender no vas a poder porque son más condiciones que hay que agregar y el SP no está preparado.
    Deberías usar sql dinámico, o sea, crear la sentencia en Fox y pasarla al Sqlexec()
    Saludos

--
Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/CAMkTt8ovjePDRARkH9F8%3DSkipTqOofAVUKRAxacrUFvN%2BeGqtg%40mail.gmail.com.

Cristian Novoa

unread,
Apr 28, 2022, 4:21:59 PM4/28/22
to Comunidad de Visual Foxpro en Español

No conozco MySQL, pero en SQL Server se puede ejecutar un SQL dinámico.

ZeRoberto

unread,
Apr 28, 2022, 9:32:14 PM4/28/22
to publicesvfoxpro
Me doy cuenta que con este método tampoco se podrá hacer porque 1 registro solo puede contener un solo código

SELECT COUNT(*) Cantidad
         FROM habitaciones_dato
         WHERE HabitacionID = tnHabitacionID AND 
               LPAD(PropiedadID, 2, '0') = '02' AND
               LPAD(PropiedadID, 2, '0') = '03'

La unica forma seria comparar cuantos registros por habitación hay y compararlos con la cantidad de ítems que tiene el parámetro lista "03,04", si es la misma cantidad significa que tiene todos los parametros solicitados

Saludos

Ze





--
Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.

ZeRoberto

unread,
Apr 28, 2022, 10:10:25 PM4/28/22
to publicesvfoxpro
Bueno ya lo solucione, de esta forma

FUNCTION sf_propiedades(tnHabitacionID, tcLista)
BEGIN
  DECLARE lnResult, lnCuenta, lnTotal SMALLINT DEFAULT 0;

  SELECT COUNT(*) Cantidad
         FROM habitaciones_dato
         WHERE HabitacionID = tnHabitacionID AND LOCATE(LPAD(PropiedadID, 2, '0'), tcLista) > 0
         INTO lnCuenta;
  SET lnTotal = sf_wordcount(tcLista, ',');
  SET lnResult = lnCuenta = lnTotal;
RETURN lnResult;
END

Saludos

Ze



Reply all
Reply to author
Forward
0 new messages