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

[MySQL + PHP] Verificar várias tabelas com uma condição


LatiosDoug

Pergunta

Olá pessoal, estou a alguns dias tentando fazer algo do tipo, mas estou sem ideias e tudo que eu tentei tem dado errado. Sou iniciante em PHP/MySQL então, me desculpem se essa for uma dúvida "newbie".

Eu criei várias tabelas, para supor, uma se chama Notebook, outra se chama Desktop e outra se chama Tablet. Cada uma dessas tabelas tem um ID e o nome da máquina. Eu gostaria que o PHP criasse o ID de um número entre 100000 à 999999, mas que não possa haver registros iguais. Ignorando tudo isso, eu fiz todo o resto e armazenei o resultado numa variável chamada $id. O que eu quero é uma maneira de fazer SELECT em todas as tabelas em busca de um registro que tenha a ID armazenada na variável.

Eu tentei o seguinte código

SELECT n.Nome, d.Nome, t.Nome FROM Notebook n, Desktop d, Tablet t WHERE n.ID = " . $id . " OR d.ID = " . $id . " OR t.ID = " . $id . "

Mas ele só funciona se tiver um registro com a mesma ID em todas as tabelas. Por exemplo, se tiver um registro com a ID 578462 tanto em Notebook, quanto em Desktop, quanto em Tablet.

Eu queria algo que buscasse apenas um único registro (Ou mais se houver) de uma ID em uma tabela. Voltando ao exemplo anterior, se fosse encontrada a ID 578462 em Desktop já era o suficiente para exibir, mesmo que não houvesse nada em Notebook ou em Tablet.

Obrigado por qualquer ajuda. Qualquer código que funcione para essa finalidade já me ajuda para adaptar para o que eu quero.

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

Antes de tudo, mude a sua estrutura.

Use uma só tabela, com um campo identificando o tipo de equipamento. Essa é a forma correta.

Assim o SELECT fica simples.

 

Outra coisa, sobre o ID, por que não usar um número sequencial (auto increment)? Não vai dar trabalho à toa de ficar pesquisando se o ID gerado já existe.

Link para o comentário
Compartilhar em outros sites

  • 0

Você quer que o ID se refira a DESKTOP e/ou TABLET e/ou NOTEBOOK? é isso?

Se for, crie uma tabela com os IDs e outra com os dados, tipo:

Tabela IDs:

id  int auto-increment primary-key  - (o ID em si)

nome varchar(40)  - (para um nome qualquer que você queira usar para o seu ID)

 

Tabela de Dados

codigo   int auto-increment primary-key

nome-equipamento varchar(40)    (aqui você coloca 'desktop','notebook', 'tablets')

cod_id  (aqui você coloca a ID que se refere)

 

 

Assim, se você tiver uma ID numero 560000,  poderá ter dados do tipo:

nome-equipamento='DESKTOP', cod_id='560000';

nome-equipamento='TABLET', cod_id='560000';

nome-equipamento='notebook', cod_id='560000';

 

para isso um exemplo de select:  'select * from tabela_de_dados where cod_id=560000 order by nome-equipamento'

Ajudei?  responde aí

 

 

 

Link para o comentário
Compartilhar em outros sites

  • 0

Bem, obrigado aos dois por responderem.

Infelizmente eu não posso alterar a estrutura da tabela. Pois a única coisa que terá em comum entre elas é o campo código, os outros campos serão diferentes...

Por conta disso eu tenho que criar o ID e pesquisá-lo, pois são três tabelas diferentes e pode ser que, em duas delas ou mais, haja dados iguais...

Tentei JOIN também não ajudou muito, devolveu o mesmo resultado acima...

Auto-increment também não ajudaria muito, pois eu quero uma espécie de código de 6 digitos (Por isso de 100000 à 999999) que eu possa oferecer ao cliente como senha ou comprovante (Esqueci a palavra agora...), e não um numero crescente, pode ser qualquer um entre 100000 à 999999 sem ordem...

Irei tentar UNION em breve, mas só depois do feriado. Alguém poderia me dizer se vale a pena testar ou é melhor nem perder meu tempo?

Link para o comentário
Compartilhar em outros sites

  • 0

Bom dia!

Um UNION seria uma boa. Utilizo ele em pesquisas de palavras em sites meus, quando há necessidade de pesquisar algo em vvárias tabelas diferentes. Mas observe que o UNION deve retornar os mesmos campos em todas as tabelas, os campos devem ter os mesmos nomes.

 

---------------------------------------------------

O auto increment dá para configurar para começar com números elevados! A vantagem é que seria automatico.

------------------------------------------------------

No seu caso, acho que teria de ter alguma verificação para o ID ser unico. Quem sabe colocando o ID como uma chave UNICA. Se o ID for criado 'na mão', deverá ter algo para verificar se já não existe...

 

Valeu, boas festas!

 

Link para o comentário
Compartilhar em outros sites

  • 0
Em 30/12/2015 at 22:16, LatiosDoug disse:

Irei tentar UNION em breve, mas só depois do feriado. Alguém poderia me dizer se vale a pena testar ou é melhor nem perder meu tempo?

Insisto em dizer que você precisa modelar seu banco direito. 

Quer usar UNION, ok... Quando tiver 100 tabelas, serão 100 UNONs... Desempenho e consistência podem ficar bem prejudicados

 

Leia sobre Formas Normais. Estude Relacionamento de Tabelas, Chaves Estrangeiras. O banco é a parte mais importante para o código ficar limpo e rápido. Se continuar com o banco mal modelado, o código ficará cada vez pior

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

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