Jump to content

Query de multi tabelas


Umbus
 Share

Recommended Posts

Boas,

Imaginasse que tenho a tabela1 e tabela2 e quero encontrar a palavra "teste". Como posso fazer isso no mysql?

Eu fiz isto mas não funciona:

SELECT *
FROM tabela1, tabela2
WHERE tabela1.nomeLIKE '%teste%'
OR tabela1.estilo LIKE '%teste%'
OR tabela2.trabalho LIKE '%teste%'
OR tabela2.informacoes LIKE '%teste%'
OR tabela2.contacto LIKE '%teste%'
LIMIT 0 , 30

Eu sou eu e eu sou aquele que sou eu...

Link to comment
Share on other sites

Se não funciona, devia (desde que tenhas corrigido ali aquele espaço que falta).

Agora, dá os resultados que queres? Provavelmente, não. O que estás a fazer é um produto das duas tabelas, isto é, vai-te multiplicar o número de resultados.

Para encontrares registos (únicos) de uma e de outra, não tens hipótese: só com duas queries.

"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Link to comment
Share on other sites

Tens que relacionar os registos entre as 2 tabelas. Imagina que tens tabela1.id que é chave primária e tens-la como chave estrangeira em tabela2 como tabela2.idAluno. Para fazeres a junção das tabelas fazes algo do género:

SELECT * FROM tabela1, tabela2 WHERE tabela1.id = tabela2.idAluno

Depois é só adicionares o resto das condições. Claro está, se não houver uma relação entre as 2 tabelas, tens que fazer duas queries separadas.

Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Link to comment
Share on other sites

Mas queres resultados relacionados, ou queres pesquisar resultados de uma e de outra tabela em separado?

O que é que está no primeiro post que permite ao djthyrax tirar a conclusão que tirou, que eu não vejo?

"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Link to comment
Share on other sites

E assim, as duas tabelas complementam-se. Dentro da tabela2 existe uma coluna que e "id_tab1" que contem o id a que corresponde a tabela1. O que pretendo e ficar com os dados das duas tabelas juntos. Ou seja imaginando que se existe a palavra "teste" na tabela1 ou na tabela2 aparece no array os dados dessa query.

Eu sou eu e eu sou aquele que sou eu...

Link to comment
Share on other sites

É exactamente da mesma forma que estás a fazer, só tens que adicionar a relação entre tabelas à query, tal como o djthyrax disse. Ou seja:

SELECT *
FROM tabela1, tabela2
WHERE
    tabela1.id = tabela2.id_tab1 AND
    (tabela1.nome LIKE '%teste%'
    OR tabela1.estilo LIKE '%teste%'
    OR tabela2.trabalho LIKE '%teste%'
    OR tabela2.informacoes LIKE '%teste%'
    OR tabela2.contacto LIKE '%teste%')

Como as comparações são disjunções (e tu queres que pelo menos uma aconteça), tens que adicionar os parênteses. Caso contrário, a relação tabela1.id = tabela2.id_tab1 e a comparação tabela1.nome LIKE '%teste%' teriam que acontecer obrigatoriamente.

“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Link to comment
Share on other sites

so para conhecimento, existe tambem a solução de joins

SELECT *
FROM tabela1 INNER JOIN tabela2 ON tabela1.id = tabela2.id_tab
WHERE
    tabela1.nome LIKE '%teste%'
    OR tabela1.estilo LIKE '%teste%'
    OR tabela2.trabalho LIKE '%teste%'
    OR tabela2.informacoes LIKE '%teste%'
    OR tabela2.contacto LIKE '%teste%'
IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.