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

estoy parado y no puedo continuar, es urgente gracias.

estoy terminando un módulo de ecommerce y estoy con la presentación de los pedidos, esta es la estructura de tablas:

Código MySQL:
Ver original
  1. CREATE TABLE `usuarios` (
  2.   `Id` int(11) NOT NULL auto_increment,
  3.   `Nombre` varchar(20) default NULL,
  4.   `Csena` varchar(20) default NULL,
  5.   `Id_grupo` int(11) NOT NULL,
  6.   PRIMARY KEY  (`Id`),
  7.   KEY `Id_grupo` (`Id_grupo`)
  8.  
  9. CREATE TABLE `ec_pedidos` (
  10.   `Id_User` int(11) NOT NULL,
  11.   `Fecha_Ped` date NOT NULL,
  12.   `IVA_aplicado` int(3) NOT NULL,
  13.   `Bimponible` decimal(9,2) NOT NULL,
  14.   PRIMARY KEY  (`Id`),
  15.   KEY `Id_User` (`Id_User`)
  16.  
  17. CREATE TABLE `ec_pedidos_linest` (
  18.   `Id_Pedido` int(9) NOT NULL,
  19.   `Id_Estado` int(9) NOT NULL,
  20.   `Comentario` varchar(150) NOT NULL,
  21.   PRIMARY KEY  (`Id`),
  22.   KEY `Id_Estado` (`Id_Estado`),
  23.   KEY `Id_Pedido` (`Id_Pedido`)
  24.  
  25. CREATE TABLE `ec_pedidos_est` (
  26.   `Nombre` varchar(50) NOT NULL,
  27.   `Color` varchar(10) NOT NULL,
  28.   PRIMARY KEY  (`Id`)

los pedidos los presento en una tabla de la siguiente manera:


Mi problema viene a la hora de usar el buscador de arriba, sobre todo en el estado.

el pedido guarda todos los estados que ha tenido con su fecha, siendo el estado actual el que tenga la fecha más reciente según el número de pedido.

cuando uso el buscador, tengo que generar una cláusula Where para anidarla al select y así mostrar los resultados de la búsqueda paginados, pero no hay manera.

Esto es a lo máximo que llego:

Código MySQL:
Ver original
  1. SELECT DISTINCT Pe.id, pe.Su_Referencia, pe.Id_User, pe.Fecha_ped, pe.bimponible, es.id_estado AS idest, MAX( es.fechahora ) AS ulti
  2. FROM Usuarios AS Us
  3. EC_Pedidos_LinEst AS Es
  4. INNER JOIN EC_Pedidos AS Pe ON Es.Id_Pedido = Pe.Id
  5. ) ON Us.Id = Pe.Id_User
  6. GROUP BY Pe.id
  7. LIMIT 0 , 30

Me devuelve todos los pedidos y la última fecha de las líneas de estado, pero no corresponde con el último id de estado, me devuelve el primero.

he intentado anidar select, pero tampoco lo he conseguido.