Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Ajuda SQL


Guest Mszx

Pergunta

Tenho o seguinte script que se encontra abaixo, e estou com dificuldades num comando SQL que faça o seguinte:

Introduza o seu emai e password (género de um login) depois do login para detectar que é o USER com ID = X

Mostrar então o histórico de filmes alugados e/ou comprados desse utilizador, a parte do login eu fiz, ou seja, ao fazer o login ele recebe o ID do utilizador e teria de mostrar todos os filmes alugados e comprados desse ID, será que me podem ajudar com o comando SQL???

Sabendo que alg_comp_def char(1) not null é A se for alugado ou C se for comprado, seria para mostrar algo como:

Utilizador X

Alugou:

Filme Y ... categoria Z ... data de inciio do aluguer ... data de fim do aluguer

Comprou:

Filme Y ... categoria Z ... data da compra ... data de fim da compra

drop table utilizador cascade constraints;

create table utilizador (user_id number(10) not null,

user_nome varchar2(250) not null,

user_dnsc date not null,

user_sexo char(1) not null,

user_email varchar2(50) constraint Double_Email not null,

user_password number(10) not null,

user_morada varchar(250) not null,

user_dresg date not null);

drop table aluguer_compra cascade constraints;

create table aluguer_compra (alg_comp_id number(10) not null,

alg_comp_inicio date not null,

alg_comp_fim date not null,

alg_comp_user_id number(10) not null,

alg_comp_film_id number(10) not null,

alg_comp_def char(1) not null);

drop table filme cascade constraints;

create table filme (film_id number(10) not null,

film_nome varchar2(60) constraint Double_Nome not null,

film_lanc date not null,

film_realizador varchar2(60) not null,

film_pvenda number(5) not null,

film_palug number(5) not null,

film_siteoficial varchar2(250),

film_sinopse varchar2(1000) not null,

film_cat_id number(10) not null);

drop table categoria cascade constraints;

create table categoria (cat_id number(10) not null,

cat_designacao varchar2(40) not null);

drop table detalhe_factura cascade constraints;

create table detalhe_factura (det_fact_id number(10) not null,

det_fact_alg_id number(10) not null);

drop table recibo cascade constraints;

create table recibo (recibo_id number(10) not null,

recibo_alg_id number(10) not null,

recibo_dat_emissao date not null,

recibo_custo_total number(10) not null,

recibo_iva number(2) not null,

recibo_descontos number(2));

Link para o comentário
Compartilhar em outros sites

16 respostass a esta questão

Posts Recomendados

  • 0
Tenho o seguinte script que se encontra abaixo, e estou com dificuldades num comando SQL que faça o seguinte:

Introduza o seu emai e password (género de um login) depois do login para detectar que é o USER com ID = X

Mostrar então o histórico de filmes alugados e/ou comprados desse utilizador, a parte do login eu fiz, ou seja, ao fazer o login ele recebe o ID do utilizador e teria de mostrar todos os filmes alugados e comprados desse ID, será que me podem ajudar com o comando SQL???

...

Oi, 'Mszx'!

Acho que o que você está querendo é algo do tipo:

SELECT f.film_nome, c.cat_designacao, IF(alg_comp_def = 'C', 'COMPRA', 'ALUGUEL') AS status, alg_comp_inicio, alg_comp_fim 
FROM aluguer_compra ac
INNER JOIN utilizador u ON ac.alg_comp_user_id = u.user_id
INNER JOIN filme f ON ac.alg_comp_film_id = f.film_id
INNER JOIN categoria c ON f.film_cat_id = c.cat_id
WHERE ac.alg_comp_user_id = usuariodesejado

Verifique e informe novamente em caso de dúvidas.

Link para o comentário
Compartilhar em outros sites

  • 0
Tenho o seguinte script que se encontra abaixo, e estou com dificuldades num comando SQL que faça o seguinte:

Introduza o seu emai e password (género de um login) depois do login para detectar que é o USER com ID = X

Mostrar então o histórico de filmes alugados e/ou comprados desse utilizador, a parte do login eu fiz, ou seja, ao fazer o login ele recebe o ID do utilizador e teria de mostrar todos os filmes alugados e comprados desse ID, será que me podem ajudar com o comando SQL???

...

Oi, 'Mszx'!

Acho que o que você está querendo é algo do tipo:

SELECT f.film_nome, c.cat_designacao, IF(alg_comp_def = 'C', 'COMPRA', 'ALUGUEL') AS status, alg_comp_inicio, alg_comp_fim 
FROM aluguer_compra ac
INNER JOIN utilizador u ON ac.alg_comp_user_id = u.user_id
INNER JOIN filme f ON ac.alg_comp_film_id = f.film_id
INNER JOIN categoria c ON f.film_cat_id = c.cat_id
WHERE ac.alg_comp_user_id = usuariodesejado

Verifique e informe novamente em caso de dúvidas.

Sim resolveu muito obrigado :)

Uma ultima questão:

Tenho isto:

procedure listar(p_cat_id in number default null) is

cursor c_filmes is

select * from filme, categoria

where film_cat_id = cat_id

and to_char(cat_id) like nvl(to_char(p_cat_id)||'%','%');

cursor c_categoria is

select * from categoria;

<table width="100%" border="1">

<tr>

<th>Nome</th>

<th>Categoria</th>

<th>Preço de Venda</th>

<th>Preço Aluguer</th>

<th>Sinopse</th>

</tr>

for r_filmes in c_filmes loop

htp.p('<tr>');

htp.p('<td><center>'||r_filmes.film_nome||'</center></td>');

htp.p('<td><center>'||r_filmes.cat_designacao||'</center></td>');

htp.p('<td><center>'||r_filmes.film_pvenda||' Euros <INPUT TYPE=CHECKBOX NAME="C" value="ON"></center></td>');

htp.p('<td><center>'||r_filmes.film_palug||' Euros <INPUT TYPE=CHECKBOX NAME="A" value="ON"></center></td>');

htp.p('<td><center>'||r_filmes.film_sinopse||'</center></td>');

htp.p('</tr>');

end loop;

Agora a minha questão é, este código faz aparecer todos os filmes existentes na BD, como se pode ver existe uma checkbox para alugar e comprar C, A, como é que faço para ao escolher imaginemos:

Examplo:

Filme ......... Alugar ......... Comprar

ABC ......... CHECK .........

ABD ......... ......... CHECK

Enviar a informação que que o user quer comprar o filme ABD e alugar o ABC, ou seja teria que gerar uma factura / recibo (procedure), com os filmes ABC e ABD como alugado e comprado respectivamente

Para saber:

alg_comp_inicio date not null, é a data em que a factura é imitida, sysdate

alg_comp_fim date not null, seria sysdate se o filme fosse comprado ou seria dado ao user para escolher os dias que quer alugar o filme, exemplo 32 dias e iria então o sistema gerar a data 23-01-2008

recibo_custo_total number(10) not null, teria de dar a soma do filme comprado mais o valor do filme alugado x o numero de dias

Editado por Mszx
Link para o comentário
Compartilhar em outros sites

  • 0
Que linguagem de programação você está usando?

PL SQL

ORACLE?

Sim ORACLE

Quanto a PL/SQL não posso te ajudar no momento. Há mais de 5 anos que não vejo isso. Desde a versão 8.

Se suas perguntas se limitarem a SQL e/ou SQL ANSI, poderei continuar a ajudá-lo. Pois o MySQL é um banco que usa um padrão da ORACLE em seu engine InnoDB.

Link para o comentário
Compartilhar em outros sites

  • 0
Que linguagem de programação você está usando?

PL SQL

ORACLE?

Sim ORACLE

Quanto a PL/SQL não posso te ajudar no momento. Há mais de 5 anos que não vejo isso. Desde a versão 8.

Se suas perguntas se limitarem a SQL e/ou SQL ANSI, poderei continuar a ajudá-lo. Pois o MySQL é um banco que usa um padrão da ORACLE em seu engine InnoDB.

Sim a minha duvida passa pelo SQL, porque o código em si eu sei, a minha duvida estava mesmo, em saber a parte de ter o filmes seleccionados para compra/aluguer e depois passar esses filmes para uma nova procedure para gerar o recibo com esses 2 filmes, só isso, passando isso eu penso que já me safava tirando a parte de saber como o SQL iria calcular a data que seria após introdução dos dias que o filme seria alugado.

Link para o comentário
Compartilhar em outros sites

  • 0

Oi, Mszx!

Desculpa a demora estava ocupado. Hoje o dia está movimentado aqui no trabalho.

Na tabela abaixo você fala do detalhe da fatura com apenas 2 campos.

Quem é det_fact_alg_id?

como saber que filme foi vendido/alugado? Onde você controla isto?

Você não esqueceu nenhuma estrutura quando postou o primeiro tópico?

drop table detalhe_factura cascade constraints;

create table detalhe_factura (det_fact_id number(10) not null,

det_fact_alg_id number(10) not null);

drop table recibo cascade constraints;

create table recibo (recibo_id number(10) not null,

recibo_alg_id number(10) not null,

recibo_dat_emissao date not null,

recibo_custo_total number(10) not null,

recibo_iva number(2) not null,

recibo_descontos number(2));

Link para o comentário
Compartilhar em outros sites

  • 0
Oi, Mszx!

Desculpa a demora estava ocupado. Hoje o dia está movimentado aqui no trabalho.

Na tabela abaixo você fala do detalhe da fatura com apenas 2 campos.

Quem é det_fact_alg_id?

como saber que filme foi vendido/alugado? Onde você controla isto?

Você não esqueceu nenhuma estrutura quando postou o primeiro tópico?

drop table detalhe_factura cascade constraints;

create table detalhe_factura (det_fact_id number(10) not null,

det_fact_alg_id number(10) not null);

drop table recibo cascade constraints;

create table recibo (recibo_id number(10) not null,

recibo_alg_id number(10) not null,

recibo_dat_emissao date not null,

recibo_custo_total number(10) not null,

recibo_iva number(2) not null,

recibo_descontos number(2));

São essas duas que mencionaste mais a

create table aluguer_compra (alg_comp_id number(10) not null,

alg_comp_inicio date not null,

alg_comp_fim date not null,

alg_comp_user_id number(10) not null,

alg_comp_film_id number(10) not null,

alg_comp_def char(1) not null);

alg_comp_film_id number(10) not null, guarda o filme em questão

alg_comp_def char(1) not null); define se é alugado ou comprado

alg_comp_user_id number(10) not null, define o user que está a comprar/alugar

E o det_fact_alg_id number(10) not null é o alg_comp_id number(10) not null,

Penso que tenha respondido a tudo.

Link para o comentário
Compartilhar em outros sites

  • 0
Agora a minha questão é, este código faz aparecer todos os filmes existentes na BD, como se pode ver existe uma checkbox para alugar e comprar C, A, como é que faço para ao escolher imaginemos:

Exemplo:

Filme ......... Alugar ......... Comprar

ABC ......... CHECK .........

ABD ......... ......... CHECK

Enviar a informação que que o user quer comprar o filme ABD e alugar o ABC, ou seja teria que gerar uma factura / recibo (procedure), com os filmes ABC e ABD como alugado e comprado respectivamente

Você terá que gerar uma procedure que rode o repositório onde você guardou a informação, durante a coleta feita pelo usuário e gravar em aluguer_compra usando um insert do tipo:

INSERT INTO aluguer_compra (alg_comp_id, alg_comp_inicio, alg_comp_fim, alg_film_id,  alg_user_id, alg_comp_def)
VALUES (max, sysdate, IF(escolha = ‘C’, sysdate, DATE_ADD(sysdate, INTERVAL dias DAY), filmeid, usuarioid, escolha);

Onde max é uma variável com o maior id da tabela + 1. (Não lembro como o oracle incrementa um número automaticamente).

Escolha é a variável que leu o checkbox da tela e em seu conteúdo tem ‘C’ ou ‘A’

Dias é uma variável que contém o número de dias de aluguel do filme.

Estas variáveis são criadas em seu PLSQL e não sei como isto funciona.

Uma vez gravada esta informação e durante este loop você poderá acumular os dados para o recibo/fatura.

Acho que é isso.

Link para o comentário
Compartilhar em outros sites

  • 0
Agora a minha questão é, este código faz aparecer todos os filmes existentes na BD, como se pode ver existe uma checkbox para alugar e comprar C, A, como é que faço para ao escolher imaginemos:

Exemplo:

Filme ......... Alugar ......... Comprar

ABC ......... CHECK .........

ABD ......... ......... CHECK

Enviar a informação que que o user quer comprar o filme ABD e alugar o ABC, ou seja teria que gerar uma factura / recibo (procedure), com os filmes ABC e ABD como alugado e comprado respectivamente

Você terá que gerar uma procedure que rode o repositório onde você guardou a informação, durante a coleta feita pelo usuário e gravar em aluguer_compra usando um insert do tipo:

INSERT INTO aluguer_compra (alg_comp_id, alg_comp_inicio, alg_comp_fim, alg_film_id,  alg_user_id, alg_comp_def)
VALUES (max, sysdate, IF(escolha = ‘C’, sysdate, DATE_ADD(sysdate, INTERVAL dias DAY), filmeid, usuarioid, escolha);

Onde max é uma variável com o maior id da tabela + 1. (Não lembro como o oracle incrementa um número automaticamente).

Escolha é a variável que leu o checkbox da tela e em seu conteúdo tem ‘C’ ou ‘A’

Dias é uma variável que contém o número de dias de aluguel do filme.

Estas variáveis são criadas em seu PLSQL e não sei como isto funciona.

Uma vez gravada esta informação e durante este loop você poderá acumular os dados para o recibo/fatura.

Acho que é isso.

Então mas imaginando uma lista de 10 filmes onde ele escolhe o filme 3, 4 e 8, como é que eu consigo enviar os ID's dos filmes mais as variáveis A ou C para um novo procedimento?

Link para o comentário
Compartilhar em outros sites

  • 0
Então mas imaginando uma lista de 10 filmes onde ele escolhe o filme 3, 4 e 8, como é que eu consigo enviar os ID's dos filmes mais as variáveis A ou C para um novo procedimento?

Conforme ele for escolhendo você terá que ir acumulando (um a um) em uma matriz ou em uma tabela temporária.

para então descarregar quando ele confirmar a operação.

Link para o comentário
Compartilhar em outros sites

  • 0
E como é que se faz isso??

Desculpa tantas questões, mas comecei a trabalhar com isto recentemente.

e como quero aprender, pergunto, se não pedia só para postarem código.

Obrigado desde já por todas as ajudas.

É como te falei antes. isto é linguagem e não lembro mais como se usa. Vou catar um livro em casa e, amanhã, ver como posso ter ajudar. Mas a versão que tenho creio não ter estes novo atributos de www.

Link para o comentário
Compartilhar em outros sites

  • 0
E como é que se faz isso??

Desculpa tantas questões, mas comecei a trabalhar com isto recentemente.

e como quero aprender, pergunto, se não pedia só para postarem código.

Obrigado desde já por todas as ajudas.

É como te falei antes. isto é linguagem e não lembro mais como se usa. Vou catar um livro em casa e, amanhã, ver como posso ter ajudar. Mas a versão que tenho creio não ter estes novo atributos de www.

Muito obrigado por tudo, entretanto eu também vou tentando e qualquer coisa venho aqui dizer.

Fico no aguardo :)

Obrigado

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...