Ver Mensaje Individual
  #1 (permalink)  
Antiguo 23/12/2008, 11:33
sk1one
 
Fecha de Ingreso: diciembre-2007
Mensajes: 149
Antigüedad: 17 años
Puntos: 1
Pregunta Ayuda con consulta

Un saludo y bueno también de camino felices fiestas a los usuarios del foro, en principio comento lo que tengo hecho y a lo que quiero llegar pero no puedo, ¿OK?.

Nota: no es para un ejercicio de clase ni nada por el estilo es un pique mío interno jojojo

TABLAS:
DROP TABLE IF EXISTS usuario;
CREATE TABLE usuario(
id_usuario int(11) auto_increment,
dni varchar(9) not null unique,
nombre varchar(100) not null unique,
profesion varchar(100) not null,
anio_nac int(11) not null,
sexo varchar(6) not null,
direccion varchar(150) not null,
cp int(11) not null,
poblacion varchar(50) not null,
barrio varchar(50) not null,
telf_1 int(11) not null,
telf_2 int(11),
email varchar(50) not null,
nick varchar(15) not null,
pass varchar(15) not null,
horas_disponibles int(11) default 0,
PRIMARY KEY(id_usuario)
)ENGINE=InnoDB;

DROP TABLE IF EXISTS movimiento;
CREATE TABLE movimiento(
id_movimiento int(11) auto_increment,
id_usuario int(11) not null,
id_actividad int(11) not null,
oferta tinyint(1),
demanda tinyint(1),
fecha date,
horas_empleadas int(11) default 0, -- horas empleadas en el movimiento
estado tinyint(1),
PRIMARY KEY(id_movimiento)
)ENGINE=InnoDB;
Necesito una consulta que me realize lo siguiente:

SELECCIONA LAS PERSONAS QUE DEMANDEN ALGO Y TENGAN UNA HORA MINIMA DISPONIBLE Y QUE ADEMAS NO HAYAN SOLICITADO
MAS DE 2 HORAS:



Pero he llegado hasta la siguiente consulta:
CONSULTA 1:

SELECCIONA LOS USUARIOS QUE TENGAN ALGÚN MOVIMIENTO Y MUESTRE LAS HORAS USADAS POR CADA UNO:

SELECT usuario.id_usuario,usuario.nombre,movimiento.id_ac tividad,SUM(movimiento.horas_empleadas) AS TOTAL_HORAS,movimiento.id_usuario
FROM usuario,movimiento
WHERE movimiento.id_usuario = usuario.id_usuario
GROUP BY movimiento.id_usuario

RESULTADO CONSULTA 1:

id_usuario nombre id_actividad TOTAL_HORAS id_usuario
1 uss1 4 8 1
2 uss2 1 2 2
3 uss3 1 2 3

Hasta aquí bien pero ahora necesito "filtrar" los campos que tengan un TOTAL_HORAS mayor que 2, el problema es que he provado muchas consultas, y claro la tabla TOTAL_HORAS es un alias y no está en la tabla creada así que mysql me devuelve un error, no sé entonces si se puede con mysql hacer eso, así que quiero que echeis una mano o si no acabaré haciendolo con php y ya está, solo quería saber si había forma con mysql. Al grano esto es lo que yo conseguí:

SELECT usuario.id_usuario,usuario.nombre,movimiento.id_ac tividad,SUM(movimiento.horas_empleadas) AS TOTAL_HORAS,movimiento.id_usuario
FROM usuario,movimiento
WHERE movimiento.id_usuario = usuario.id_usuario
AND TOTAL_HORAS < 8
GROUP BY movimiento.id_usuario;

Evidentemente esto no funciona pero era para que lo vieseis.

Gracias por vuestra atención. Por cierto a que molan lo coloritos ^^_

Última edición por sk1one; 23/12/2008 a las 11:42