Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Umbus

Query de multi tabelas

Mensagens Recomendadas

Umbus

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...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
mjamado

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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Umbus

Exacto a caso que da 5 resultados lol, quando na realidade so existe 1 com a palavra que procuro...

Como faço entao para que funcione?


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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
djthyrax

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!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
mjamado

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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Umbus

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...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
KTachyon

É 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.