Ver Mensaje Individual
  #4 (permalink)  
Antiguo 06/03/2010, 14:39
Xazak
 
Fecha de Ingreso: marzo-2010
Mensajes: 3
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Meter varios datos en un campo

Se trata de una Base de Datos de un Teatro.
Bueno, para empezar tengo tres entidades:

/*TABLA TARIFA*/
create table tarifa
(
idTar char(3) primary key not null,
sit enum("Patio de Butacas","Butacas Club","Butacas de Anfiteatro"),
prec tinyInt unsigned not null
)engine = innodb;


/*TABLA BUTACA*/
create table butaca
(
idBut tinyInt unsigned primary key,
codTar char(3),
foreign key (codTar) references tarifa (idTar)
)engine = innodb;


/*TABLA VENTA*/
create table venta
(
codBut tinyInt unsigned not null,
codSes char(3) not null,

primary key (codBut, codSes),

foreign key (codBut) references butaca (idBut),
foreign key (codSes) references sesion (idSes)
)engine = innodb;

En la tabla butacas aparecen las butacas totales del teatro (codigo de butaca y codigo de tarifa).
En la tabla venta aparecen las ventas de las butacas y la sesión para la que se han vendido.
Y en la tabla tarifa aparece el precio dependiendo de donde esta situada la butaca.

Lo que estoy intentando es, mediante un procedimiento al que se le pasa el codigo de sesión (S01, S02, S03 o S04) me saque un listado de las butacas, su precio y si estan o no ocupadas para esa sesión.

El fragmento que he mandado es una SELECT que me lista las butacas ocupadas para una determinada sesión. Lo que resta es que en el listado de butacas totales me saque otro campo (al que he llamado "libre") con "Si" o "No" dependiendo del estado de la butaca.
Aqui pongo el procedimiento entero, lo unico que me falla es el error que he comentado antes.

create procedure butacas_libres (in sesion char(3))
begin

declare libre int;
declare ocupada int;

set ocupada = (SELECT butaca.idBut FROM butaca, venta, tarifa WHERE idBut = venta.codBut and butaca.codTar = tarifa.idTar and venta.codSes = sesion GROUP BY idBut);

if (SELECT butaca.idbut = ocupada FROM butaca) then
set libre = "NO";
else
set libre = "SI";
end if;

SELECT butaca.idBut, tarifa.prec, libre;

end;
$$ delimiter;

call butacas_libres("S01");


Espero que no sea muy lioso, hace poco que he empezado por mi cuenta y quizás algunas cosas no las hago como pudiera estar establecido.