Ir para conteúdo

POWERED BY:

Arquivado

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

Weiller Schepis

Reservar vários equipamentos simultaneamente

Recommended Posts

Olá galera,

 

Estou desenvolvendo um sistema de reserva de equipamentos institucionais ex: Data Show , Caixa de som e etc...

 

Dessa forma me encontrei em uma situação bem difícil e gostaria de pedir a ajuda de vocês, pois estou á vários dias pensando na solução, mas sem sucesso :upset: .

 

Possuo uma tabela chamada Equipamentos

 

create table equipamentos(

 

id_equipamento INT NOT NULL PRIMARY KEY,

nome_equipamento VARCHAR(60)

)

 

E outra tabela chamado Reserva

 

create table reserva(

id_reserva INT NOT NULL PRIMARY KEY,

id_equipamento INT NOT NULL,

FOREIGN KEY(id_equipamento)references equipamento(id_equipamento)

);

 

 

No momento de reservar o equipamento estou enviando o id do equipamento para a tabela "Reserva" que possui todas as informações da reserva(id da reserva, nome do usuário, id do equipamento, e etc...). Até ai tudo bem, está tudo funcionando corretamente :).

 

O PROBLEMA

 

No momento de reservar deve haver a possibilidade do usuário reservar um ou mais equipamentos, ou seja, ele pode reservar um Data Show e uma Caixa de Som simultaneamente.

 

Com essa demanda eu não estou conseguindo pensar em uma maneira de fazer isso, pois na tabela "Reserva" eu possuo um campo id_equipamento que é foreign key da tabela de equipamentos(id_equipamentos é chave primária da tabela equipamentos).

 

O que eu devo fazer para registrar vários equipamentos(id_equipamento, nome do equipamento) na mesma reserva?

 

Exemplo:

 

Reserva 1 , deve haver o Id do equipamento 1 ,2 e 3

Reserva 2 , deve haver o Id do equipamento 2, 3 e 6

e assim sucessivamente....

 

 

Desde já agradeço amigos!! :yes:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você vai ter que alterar essa estrutura. Uma forma menos danosa é remover a chave estrangeira, mudar o campo para varchar e alterar seu programa para que salve os equipamentos separando por vírgulas.

Aí a busca pode ser por WHERE IN (XXX, YYY, ZZZ), onde XXX, YYY e ZZZ vão ser os itens da lista de equipamentos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite Massaki,

 

Antes de mais nada , quero agradecer por se disponibilizar a me ajudar =)

 

Acredito que dessa forma não irá dar certo, porque estou realizando uma consulta que identifica se o equipamento(id_equipamento) está reservado para determinado dia e turno. Ex: se houver um equipamento reservado para hoje 05/09 , ele não é retornado como opção para outro usuário reservar.

 

Acho que não irá dar certo porque a consulta não irá identificar o id 1,2,3 como o de um equipamento existente :upset:

 

Mas caso você saiba de alguma forma para que a consulta consiga identificar que o id 1 2 e 3 está reservado para determinado dia e assim não retorne os equipamentos como opção para reserva, agradeço se compartilhar comigo =)

Compartilhar este post


Link para o post
Compartilhar em outros sites

create table reserva

(id_reserva INT NOT NULL ,

id_equipamento INT NOT NULL

PRIMARY KEY (id_reserva,id_equipamento)

FOREIGN KEY(id_equipamento)references equipamento(id_equipamento));

 

 

 

Faça com que RESERVA tenha uma PK composta , só não estou certo de a síntaxe ser esta mas uma pesquisada na documentação resolve.

 

Com a PK assim a reserva permite mais de um equipamento.

 

 

Creio que falta em RESERVA data de e até da reserva.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite Motta,

 

Fiz da maneira que você me orientou e funcionou =) , porém fico com a seguinte dúvida

 

Quando eu inserir uma nova reserva com 3 equipamentos, será inserido 3 linhas na tabela ?

 

Exemplo: Realizei a reserva 1 com 3 equipamentos.

Segue imagem abaixo

 

1Fpqf3.jpg

 

 

Como observa na imagem acima, foi inserido 3 novas linhas , contendo o id_equipamento distinto, mas todas as outras informações iguais, dessa forma fica minha pergunta, é dessa maneira que deverá ficar? ou eu entendi errado ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, são 3 equipamentos reservados diferentes.

 

Uma estrutura alternativa seria

 

 

Reserva-----------<Item_Reserva

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite Motta,

 

Cara, muito obrigado pela dica, com o conhecimento que você me passou consegui resolver o meu problema :)

 

Para quem estiver com a mesma dúvida , faça assim:

 

1 - Crie uma tabela com chave primária composta e para buscar os campos agrupados faça da seguinte maneira:

 

SELECT campos_que_deseja_retornar,GROUP_CONCAT(campo_que_deseja_mostrar_em_um_registro)
FROM tabela
GROUP BY campo_que_deseja_agrupar

 

Mas uma vez agradeço Motta =)

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.