Ver Mensaje Individual
  #20 (permalink)  
Antiguo 22/11/2013, 06:57
PabloManuel
 
Fecha de Ingreso: diciembre-2010
Mensajes: 236
Antigüedad: 13 años, 4 meses
Puntos: 6
Respuesta: consulta en mysql sobre 3 tablas

Bueno, gracias a ti y a vallu por vuestros consejos, ya está operativo y sí genera una sentencia enorme pero totalmente eficiente.

He optado por subconsultas en vez de cláusulas join para poder tener un Select y un from que mostrase todos los pedidos y necesidad de usar el Where, de esta forma el Where quedaría en blanco si el usuario no busca y mostraría todos los pedidos, si usa algún campo de búsqueda, genero el Where en función de los campos usados.

1º se mostrarán siempre los registros con esta sentencia a la cual se le anidará clausua Where o no, en función de si se busca o no:

Código MySQL:
Ver original
  1.         Pe.id,
  2.         pe.Su_Referencia,
  3.         pe.Fecha_ped,
  4.         pe.bimponible,
  5.         pe.id_user,
  6.         (SELECT nombre FROM usuarios WHERE id=pe.id_user) as nombre,
  7.         (SELECT le.id_estado FROM Ec_Pedidos_LinEst As Le WHERE le.id_pedido=pe.id AND le.fechahora=(SELECT max(fechahora) FROM ec_pedidos_linest WHERE id_pedido=pe.id)) As Estado
  8.         EC_Pedidos as Pe

2º Será siempre la misma y generaré y concatenaré la sentencia Where, este sería el formato completo si usa todos los campos de búsqueda:

Código MySQL:
Ver original
  1.     (SELECT le.id_estado FROM Ec_Pedidos_LinEst As Le WHERE le.id_pedido=pe.id AND le.fechahora=(SELECT max(fechahora) FROM ec_pedidos_linest WHERE id_pedido=pe.id)) = 1
  2.     AND
  3.     (SELECT nombre FROM usuarios WHERE id=pe.id_user) LIKE '%loma%'
  4.     AND
  5.     pe.su_referencia LIKE '%89%'
  6.     AND
  7.     pe.fecha_Ped >= '2003-05-05' | pe.fecha_Ped <= '2003-05-05' | pe.fecha_ped BETWEEN '2003-01-05' AND '2003-12-05'
  8.     AND
  9.         (pe.DF_RazonSocial LIKE '%xxxxxx%'  OR
  10.         pe.DF_CIF LIKE '%xxxxxx%'  OR
  11.         pe.DF_Direc1 LIKE '%xxxxxx%' OR
  12.         pe.DF_Direc2 LIKE '%xxxxxx%' OR
  13.         pe.DF_CP LIKE '%xxxxxx%'  OR
  14.         pe.DF_Localidad LIKE '%xxxxxx%'  OR
  15.         pe.DF_Provincia LIKE '%xxxxxx%'   OR
  16.         pe.DF_Pais LIKE '%xxxxxx%'   OR
  17.         pe.DE_Nombre LIKE '%xxxxxx%'    OR
  18.         pe.DE_Direc1 LIKE '%xxxxxx%'    OR
  19.         pe.DE_Direc2 LIKE '%xxxxxx%'    OR
  20.         pe.DE_CP LIKE '%xxxxxx%'    OR
  21.         pe.DE_Localidad LIKE '%xxxxxx%'   OR
  22.         pe.DE_Provincia LIKE '%xxxxxx%'  OR
  23.         pe.DE_Pais LIKE '%xxxxxx%'
  24.         )

Genero la cadena Where a través de esta condición:

Cita:
Editado: Código de programacion no permitido en foros de Bases de Datos. Leer las normas del for, por favor.
Está pendiente de depurar y reducir, pero funciona, al final el Where se guarda en una variable de sesión.

Y con el siguiente código creo el recordset con la página que quiera:

Cita:
Editado: Código de programacion no permitido en foros de Bases de Datos. Leer las normas del for, por favor.
La función CrearRs_Paginado_MySQL la tenéis más arriba.

He incluido código asp, sé que no es el foro adecuado, si no creéis conveniente, borradlo o mover el post de sitio. Gracias por vuestra ayuda e interés.

Última edición por gnzsoloyo; 22/11/2013 a las 07:19