Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

bdexterholland

Busca de mídias não locadas

Recommended Posts

Olá,

 

Estou desenvolvendo um sistema de gestão de locadoras e preciso montar uma query que me retorne as mídias não locadas porém não consigo pensar em como fazer esta verificação de forma que não pareca uma gambiarra. Alguém me ajuda?

/* Tabela de mídias cadastradas */
DROP TABLE IF EXISTS `sis_locadora`.`loc_midias`;
CREATE TABLE  `sis_locadora`.`loc_midias` (
 `mid_Codigo` int(11) NOT NULL auto_increment,
 `mid_Titulo` varchar(40) NOT NULL,
 `mid_Genero` smallint(6) NOT NULL,
 `mid_Tipo` smallint(6) NOT NULL,
 `mid_Sinopse` blob,
 `mid_Duracao` varchar(5) NOT NULL,
 `mid_Censura` smallint(6) NOT NULL,
 `mid_Ano` smallint(6) default NULL,
 `mid_Pais` smallint(6) default NULL,
 `mid_DataCadastro` timestamp NULL default CURRENT_TIMESTAMP,
 `mid_PalavrasChave` varchar(255) default NULL,
 `mid_Observacoes` blob,
 `mid_Capa` varchar(36) default NULL,
 `mid_LimiteLancamento` timestamp NOT NULL default '0000-00-00 00:00:00',
 PRIMARY KEY  (`mid_Codigo`)
) ENGINE=InnoDB AUTO_INCREMENT=1056 DEFAULT CHARSET=utf8;

/* Tabela de vigêncas de preços */
DROP TABLE IF EXISTS `sis_locadora`.`loc_vigencias`;
CREATE TABLE  `sis_locadora`.`loc_vigencias` (
 `vig_Data` timestamp NOT NULL default CURRENT_TIMESTAMP,
 `vig_Tipo` int(11) default NULL,
 `vig_Genero` int(11) default NULL,
 `vig_Midia` int(11) default NULL,
 `vig_Preco` double NOT NULL,
 `vig_Lancamento` double NOT NULL,
 `vig_Codigo` int(10) unsigned NOT NULL auto_increment,
 PRIMARY KEY  USING BTREE (`vig_Codigo`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;

DROP TABLE IF EXISTS `sis_locadora`.`loc_locacoes`;
CREATE TABLE  `sis_locadora`.`loc_locacoes` (
 `loc_Codigo` int(11) NOT NULL auto_increment,
 `loc_DataLocacao` timestamp NOT NULL default '0000-00-00 00:00:00',
 `loc_Cliente` int(11) NOT NULL,
 `loc_Midia` int(11) NOT NULL,
 `loc_ValorLocacao` double(15,3) NOT NULL,
 `loc_ValorPago` double(15,3) default NULL,
 `loc_DataDevolucao` timestamp NULL default '0000-00-00 00:00:00',
 `loc_DataRealDevolucao` timestamp NULL default NULL,
 `loc_DataPagamento` timestamp NULL default NULL,
 PRIMARY KEY  (`loc_Codigo`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;


/* minha consulta que retorna TODAS as mídias e o valor das mesmas (tabela vigencia) se lançamento ou não */
select mid_codigo, mid_titulo, (if(mid_LimiteLancamento > CURDATE(),vig_Lancamento, vig_Preco)) AS  mid_preco
from loc_midias
inner join loc_vigencias on (mid_genero = vig_genero) or (mid_tipo = vig_tipo) or (mid_codigo = vig_midia)
order by vig_data desc

 

---

 

Sintetizando a descrição do problema:

Preciso buscar alguns campos da tabela loc_Midias e o respectivo valor da mídia, de acordo com os dados cadastrados na tabela loc_vigencias que não esteja alugada. Para controlar as mídias alugadas, tenho a tabela loc_locacoes onde eu sei que a mídia está alugada se o campo loc_DataRealDevolucao vale null.

 

 

Alguém consegue adaptar esta query para que retorne apenas as mídias não alugadas com seu respectivo preço de locação?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não seria somente ?

 

select mid_codigo, mid_titulo, (if(mid_LimiteLancamento > CURDATE(),vig_Lancamento, vig_Preco)) AS  mid_preco
from loc_midias
inner join loc_vigencias on (mid_genero = vig_genero) or (mid_tipo = vig_tipo) or (mid_codigo = vig_midia)
where oc_DataRealDevolucao is null
order by vig_data desc

Compartilhar este post


Link para o post
Compartilhar em outros sites

realmente, porém, descobri outro erro. Só um detalhe a observar é que loc_DataRealLocacao pertence a outra tabela, então, para evitar cruzamentos excessívos:

select mid_codigo, mid_titulo, (if(mid_LimiteLancamento > CURDATE(),vig_Lancamento, vig_Preco)) AS  mid_preco
from loc_midias
inner join loc_vigencias on (mid_genero = vig_genero) or (mid_tipo = vig_tipo) or (mid_codigo = vig_midia)
inner join loc_locacoes
where loc_DataRealDevolucao is null
order by vig_data desc

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.