Ir para conteúdo

POWERED BY:

Arquivado

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

Alan Maia

MYSQL com Relacionamentos

Recommended Posts

To com o seguinte problema estou desenvolvendo uma pequena aplicação Web em PHP para assistência técnica - Trabalho de Faculdade - e tenho as seguintes tabelas:

 

CREATE TABLE Clientes (  ID INT (6) NOT NULL AUTO_INCREMENT,  NOME VARCHAR (150) NOT NULL,  ENDERECO VARCHAR (50) NOT NULL,  BAIRRO VARCHAR (30) NOT NULL,  CEP INT (8) NOT NULL,  CIDADE VARCHAR (25) NOT NULL,  FONE INT (15) NOT NULL,  CELULAR INT (15) NOT NULL,  ESTADO CHAR (2) NOT NULL,  EMAIL VARCHAR (30) NOT NULL,  OBS VARCHAR (150) NOT NULL,  INDEX I1(ID),  INDEX I2 (NOME),  CONSTRAINT PK_ID PRIMARY KEY (ID) )TYPE=INNODBCREATE TABLE OS_ABRE(  OS INT (6) NOT NULL AUTO_INCREMENT,  STATUS VARCHAR (15) NOT NULL,  DATA_ENT VARCHAR (10) NOT NULL,  HORA_ENT VARCHAR (5) NOT NULL,  ATENDENTE VARCHAR (25) NOT NULL,  TIPO_EQUIP VARCHAR (25) NOT NULL,  MARCA_EQUIP VARCHAR (25) NOT NULL,  MODELO_EQUIP VARCHAR (25) NOT NULL,  NSERIE_EQUIP VARCHAR (15) NOT NULL,  PRIORIDADE_EQUIP CHAR (10) NOT NULL,  ACESSORIOS_EQUIP VARCHAR (150) NOT NULL,  DEFEITO VARCHAR (150) NOT NULL,  NOME VARCHAR (150) NOT NULL,  INDEX I3 (OS),  INDEX I4 (NOME),  PRIMARY KEY (OS, NOME),  FOREIGN KEY (NOME) REFERENCES Clientes(NOME))TYPE=INNODBCREATE TABLE OS_BAIXA(  ID_BAIXA INT (6) NOT NULL AUTO_INCREMENT,  OS INT (6) NOT NULL,  STATUS VARCHAR (10) NOT NULL,  DATA_ENT VARCHAR (10) NOT NULL,  HORA_ENT VARCHAR (5) NOT NULL,  DATA_SAI VARCHAR (10) NOT NULL,  HORA_SAI VARCHAR (5) NOT NULL,  ATENDENTE VARCHAR (20) NOT NULL,  TIPO_EQUIP VARCHAR (30) NOT NULL,  MARCA_EQUIP VARCHAR (20) NOT NULL,  MODELO_EQUIP VARCHAR (50) NOT NULL,  NSERIE_EQUIP VARCHAR (15) NOT NULL,  PRIORIDADE_EQUIP VARCHAR (10) NOT NULL,  ACESSORIOS_EQUIP VARCHAR (150) NOT NULL,  DEFEITO VARCHAR (150) NOT NULL,  ID INT (6) NOT NULL,  NOME VARCHAR (150) NOT NULL,  SOLUCAO VARCHAR (150) NOT NULL,  TECNICO VARCHAR (25) NOT NULL,  REPOSICAO VARCHAR (150) NOT NULL,  VALOR DECIMAL (10,2) NOT NULL,  GARANTIA VARCHAR (3) NOT NULL,  INDEX I5 (ID_BAIXA),   INDEX I6 (OS),  INDEX I7(ID),  INDEX I8(NOME),  PRIMARY KEY (ID_BAIXA, OS, ID),  FOREIGN KEY (OS) REFERENCES OS(OS),  FOREIGN KEY (ID) REFERENCES Clientes(ID))TYPE=INNODB

Pois bem o meu problema é o seguinte quando efetuo o cadastro do cliente sem problemas, vou abrir uma OS sem problemas, agora quando vou imprimir uma OS ou dar baixa numa OS não consigo relacionar o equipamento que deu entrada com o cliente, só aparece os dados do equipamento.

Se tiver uma alma caridosa que possa me ajudar nessa luta incansável dos programadores, ficarei muito satisfeito e agradecido.

 

Acredito que deu pra entender o problema.

 

Se possível me ajudem a montar o código em PHP tb pois o que fiz não tá dando muito certo.

 

Grato pela atenção de todos.

 

Alan Maia

AmazonInfo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mudei os nomes dos indices das tabelas de I1, I2, I3... para seus respectivos nomes NOME, ID...

 

Tabela Clientes

INDEX ID(ID),  INDEX NOME (NOME),

Tabela OS_ABRE

INDEX OS (OS),  INDEX NOME (NOME),

Tabela OS_BAIXA

INDEX ID_BAIXA (ID_BAIXA),   INDEX OS (OS),  INDEX ID(ID),  INDEX NOME(NOME),

Para ficar mais organizado...

 

Acrescentei o campo ID INT( 6 ) NOT NULL na tabela OS_ABRE depois de DEFEITO

 

E retirei os campos NOME das tabelas OS_ABRE e OS_BAIXA

Não sei se vai fazer muita diferença mas acredito que eram campos inuteis

Compartilhar este post


Link para o post
Compartilhar em outros sites

Exemplo:

CREATE TABLE parent(id INT NOT NULL, PRIMARY KEY (id)) TYPE=INNODB;CREATE TABLE child(id INT, parent_id INT, INDEX par_ind (parent_id), FOREIGN KEY (parent_id) REFERENCES parent(id)) TYPE=INNODB;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Deixa eu meter o meu bedelho...$Sql = 'SELECT * FROM CLIENTS INNER JOIN OS_BAIXA ON CLIENTS.CLIENTSId = OS_BAIXA.Id_BAIXA ORDER BY CLIENTS.CLIENTSId DESC';Tenta qker coisa posta aí beleza...T+

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui com o seguinte comando SQL no proprio PHP$sql2 = "SELECT * FROM OS_ABRE, Clientes WHERE OS_ABRE.OS=Clientes.ID AND OS=$OS";Grato pela atenção de todos

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora to com um problema quando faço um cadastro de Abertura de OS ele só faz uma OS por Cliente ou seja um cliente só pode ter uma OS o que não pode acontecer, um cliente pode ter varias os, agora uma os só pode ter um cliente me ajudem nesse dilema para saber onde esta o erro, acredito que esteja na estrutura do banco.

Compartilhar este post


Link para o post
Compartilhar em outros sites

se um cliente pode ter N OSfaz o relacionamento da OS com cliente com a pk do cliente como fk na tabela de OS pelo q eu sei eh issocaso queira uam coisa mais separada faz tipo n:n ou seja uam tabela soh com as pks de cada tabela

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.