Jump to content
Fórum Script Brasil
  • 0

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


LatiosDoug
 Share

Question

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 to comment
Share on other sites

5 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Forum Statistics

    • Total Topics
      149.6k
    • Total Posts
      646.2k
×
×
  • Create New...