Array
(
)

Consulta sql entre 2 tabelas

Elias Pereira
   - 21 mar 2013

Olá pessoal,
Estou treinando na parte de sql e gostaria de tirar algumas duvidas.
1. Instalei o xampp com o apache e mysql ativo
2. Tenho um pequeno form em php para a busca
3. Tenho 2 tabelas: "ips" e "ssid"
3.1 A tabela "ips" contem: cod (chave primaria), ip, descricao, codssid (chave estrangeira com codssid da tabela ssid), qos
3.2 A tabela "ssid" contem: codssid (chave primaria), descricao, latitude/longitude
A principio tenho um "sql" para buscar o "ip" e "descricao" da tabela "ips". Segue abaixo:
$sql = "select ip, descricao from ips where descricao LIKE '% . $busca . %' OR ip LIKE '% . $busca . %' ORDER BY descricao"; // Estou longe de onde estou fazendo o treinamento, mas acredito que seja mais ou menos isso a busca :D
O que eu gostaria de saber é se posso incluir a tabela "ssid" na consulta, e que me retorne a "descricao" desse tabela sem duplicar os dados. Teria como realizar isso?

Alex Lekao
   - 22 mar 2013

Oi Elias, bom dia!!!

Acredito que poderá usar com o join.

teste assim para ver se da certo.

select ips.ip, ips.descricao,ssid.descricao from ips
left join ssid on ssid.codssid = ips.codssid
where ips.descricao LIKE '% . $busca . %' OR ips.ip LIKE '% . $busca . %' ORDER BY ips.descricao

Espero ter ajudado.

Abraco.

Alex - Lekao

Guilherme Sousa
   - 22 mar 2013

Elias, vc pode usar esse select do Alex, mas ao invés de usar "left join" use "inner join". Com o left join vc retornará dados da tabela ips mesmo que eles não tenham correspondentes na tabela ssid.

Abraço, Guilherme

Elias Pereira
   - 22 mar 2013

@alex,

Obrigado pela ajuda! Funcionou exatamente como eu esperava! :)

@Guilherme,

Mas é exatamente isso que preciso, pois antes eu fazia a busca pela descricao. Agora consigo realizar a busca pelo descricao, ip e ssid_desc. Coloquei o INNER JOIN para testar, mas algumas buscas que eu fiz e sabia que existiam dados para isso não apareceram. Obrigado mesmo assim, pois entendi a diferença entre as opções.

Guilherme Sousa
   - 22 mar 2013

Por nada Elias.

Olhe também esse artigo no Code Project. Ele exemplifica de modo gráfico os joins no SQL. Com as imagens fica bem fácil saber o que você realmente deseja que seja retornado na consulta.

http://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins

Abraço, Guilherme

Alex Lekao
   - 22 mar 2013

Oi Elias, boa tarde!!!

Fico feliz em ter podido ajudar.

eu particularmente não entendo muito bem a diferença entre os dois, mas uso sempre o left e sempre tem dado certo, acredito que seja por causa dos condicionais que coloco no where.

Mas já peguei o link que o Guilherme passou para dar uma estuda, afinal conhecimento nunca eh demais(obrigado Guilherme).

Mas eh isso ae, precisando posta ai que a gente ajuda no que der... rsrsr

Abraco.

Alex - Lekao

Bruno Leandro
   - 22 mar 2013

a diferença entre o inner e o left é a seguinte, no inner tem que existir o registro na tabela 1 e registro na tabela 2 com a chave igual, ex: na tabela ips possui um codssid com valor 1 para que seja listado tem que possuir codssid com valor 1 na tabela ssid, ja no left independente se existir o registro na tabela ssid com valor 1 ele ira listar

Guilherme Sousa
   - 22 mar 2013

Elias, veja as imagens e se ainda tiver alguma dúvida em algum tipo de join não hesite em perguntar. Depois que eu vi essa imagem pela primeira vez meus problemas com join acabaram =)

Abraços, Guilherme

Alex Lekao
   - 22 mar 2013

Blz...

obrigadao galera... essas dicas e sugestão de blogs, sites, fóruns, etc, etc... tem sido muito útil para mim.

Obrigado.

Abraco.

Alex - Lekao

Alex Lekao
   - 22 mar 2013

Oi Guilherme, boa tarde!!

Realmente as imagens são bem ilustrativas, fica bem claro.

Obrigado pela dica.

Esse site sera mais um dos meus favoritos no navegador.

Abraco.

Alex - Lekao

Guilherme Sousa
   - 22 mar 2013

Que bom Alex, fico feliz em ter ajudado. Na faculdade só vi o inner join e nem sabia da existencia dos outros =S

Depois que eu comecei mexer com SQL todo dia e surgiram problemas reais eu tive que aprender SQL de verdade.

Alex Lekao
   - 22 mar 2013

Oi Guilherme,

apesar de já ser "tiosao"... eu estou fazendo faculdade so agora, e estamos vendo banco de dados na faculdade também, e isso foi uma das matérias que foram passadas rescentemente, e eu não as vi... rsrsr

mas eu vi varias opções de joins no curso de sql que fiz, mas como uso basicamente para ver o que tem na tabela da direita que seja igual na da esquerda, basicamente o que quero eh o que esta na tabela da esquerda mesmo, e o que preciso que seja mostrado referente das duas, uso na clausula where as condicionais para limitar ou mostrar o conteúdo da tabela da direita.

então por isso não me ative muito ao uso da inner join.

mas foi útil sim.

obrigado.

Abraco.

Alex - Lekao