MySQL - Filtro de busqueda

 
Vista:
sin imagen de perfil

Filtro de busqueda

Publicado por Diego (9 intervenciones) el 03/04/2018 21:08:36
Hola deseo realizar un filtro de busqueda a usuarios.
Desde mi interfaz en (.net) tengo cuatro <Textbox> con los siguientes campos (ApellidoP, usuario, folio y puesto)
Lo que deseo hacer es que si ingreso:

ApellidoP = lopez
num_folio = 1212

me muestre todos los usuarios con apellido lopez y los que tengan num_folio = 1212
Ejemplo:

1
2
3
4
5
idusu | apellidoP | usuario | folio | puesto
 1        lopez      usu1     2541   puestox
 2        lopez      usu2     8521   puestox
 6        sanchez    usu6     1212   puestox
 7        gomez      usu7     1212   puestox


Tengo problema para estructurar la consulta, venia trabajando con este query, ya que antes consultaba uno por uno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
select idpersona,Nombre,ApPaterno,ApMaterno, usuario as NombreUsuario, pasword as Contraseña, rol,
credencial as NumCredencial, cargo as Area_o_Cargo, idUsuario as UsuarioAlta, UsuariofkUsuariosA as UsuarioAltaPermiso,
 
group_concat(NombreFormato_Y_Permisos) NombreFormato_Y_Permisos from
 
(select idpersona,Nombre,ApPaterno,ApMaterno,usuario,pasword,rol, credencial,cargo,idUsuario,UsuariofkUsuariosA,
 
concat_ws(' : ', NombreFormato, group_concat(t3.accion separator ' , ')) NombreFormato_Y_Permisos
 
from personas
 
inner join usuarios as t2 on idPersona = t2.personafkpersonas
inner join permisos as t3 on t2.idUsuario = t3.usuariofkusuarios
inner join cformatos as t4 on t3.FormatofkCFormatos = t4.idCFormato
 
where t2.activo = 'si' and t3.activo = 'si'
AND ApPaterno like '%LOPEZ%'
 
group by idpersona, NombreFormato) T1 group by idpersona;

Gracias por su ayuda.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 953
Oro
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Filtro de busqueda

Publicado por leonardo_josue (414 intervenciones) el 04/04/2018 16:37:02
Hola Diego:

veamos si entendí lo que quieres hacer... Lo que quieres hacer es crear una sentencia SQL "dinámica" de acuerdo a lo que el usuario captura en las cajas de texto... esto lo puedes hacer desde dos puntos de vista:

1. CON TU LENGUAJE DE PROGRAMACIÓN. Esto es lo más sencillo ya que puedes utilizar las sentencias de control como IF para "armar" la consulta que necesites, es decir, antes de ejecutar la sentencia tendrías que hacer algo así:

1
2
3
4
5
6
7
8
9
10
11
--Primero Declaras una variable con la consulta que quieres SIN FILTRO o si lo prefieres con un filtro por DEFAULT
VARIABLE SQL = "SELECT lo_que_sea FROM personas WHERE 1 = 1";
--Después, preguntas por cada caja de texto, y si contiene información, entonces agregas la condición AND correspondiente:
SI TxtApellidoPat != null ENTONCES
   SQL = SQL + " and ApellidoPat = " + txtApellidoPat:
 
SI TxtUsuario != null ENTONCES:
  SQL = SQL + "AND usuario = " + txtUsuario:
 
SI TxtFolio != null ENTONCES
  SQL = SQL + " AND folio = " + txtFolio;

¿Se entiende?

2. DESDE MYSQL. Esto mismo lo puedes hacer con SQL trabajando con SENTENCIAS PREPARADAS, checa esta liga:

https://dev.mysql.com/doc/refman/5.7/en/sql-syntax-prepared-statements.html

Finalmente, debes de tener cuidado de este tipo de sentencias para que no sufras un ataque de SQL Injection:

https://www.w3schools.com/sql/sql_injection.asp

Espero que esto te sea de ayuda,

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Filtro de busqueda

Publicado por Diego (9 intervenciones) el 04/04/2018 17:42:00
Muchas gracias, ya puede resolverlo, me sirvio mucho. Gracias por el dato de SQL Injection
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar