Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Andrey Luiz

Consulta em 2 tabelas, saltando registros!

Recommended Posts

Salve Feras...!

 

Tenho um problema que já procurei pela internet toda(exagero) e não achei solução. Seguinte, tenho duas tabelas a primeira com a seguinte estrutura:

 

TABELA PLACES 
  `id` int(5) NOT NULL auto_increment,
  `Company_name
  `Address` 
  `foto_link` 
  `Fone` 
  `descricao` 
  `categoria_empresasID` 
  `tags`
  `usuarioID` 
  `bairroID` 
  `ordenar`
e a segunda com a seguinte estrutura:

TABELA `produtos` (
  `produtoID
  `produto` 
  `imagem`
  `preco`   
  `especificacoes` 
  `categoria_produtosID` 
  `usuarioID`

O campo usuarioID armazena, nas duas tabelas, dados idênticos referenciados a uma tabela de usuarios, sendo que na tabela "places" existe um só registro para usuarioID e na tabela "produtos" o usuarioID poderá ter vários registros. Pois bem, necessito uma consulta que busque, conforme váriavel previamente definida, da tabela "produtos" todos os registros que correspondam a variavel buscada mas limite a 1 registro por usuarioID e faça um JOIN com a tabela places onde usuarioID coincida com produtos.usuarioID. Tentei fazer assim:

 

SELECT places.*, produtos.produto FROM places LEFT JOIN produtos ON places.usuarioID = produtos.usuarioID WHERE produto LIKE '%".$search."%' OR id LIKE '%".$search."%' OR Company_name LIKE '%".$search."%' OR Address LIKE '%".$search."%'  OR Fone LIKE '%".$search."%' OR descricao LIKE '%".$search."%' OR tags LIKE '%".$search."%' ORDER BY ordenar DESC LIMIT 5

 

A query acontece com sucesso, mas o que acontece é que se o usuarioID 1 tiver 30 produtos com o nome procurado pela variável a consulta retorna todos os trinta produtos, juntando a tabela places a cada ocorrência do produto, ou seja, gerando 30 resultados iguais - produto e empresa igual e se o usuarioID 2 tiver mais 30 ele gera mais 30 resultados e assim sucessivamente. Já tentei com um sub SELECT com LIMIT 1 no LEFT JOIN mas ele continua listando todos os dados. É aqui que quebro a cabeça e não encontro a solução. Quero que ele busque a varíavel, e se existir outro registro parecido para o mesmo usuário o mysql salta e busca o campo que coincida com a variável mas de outros usuarioID, e ainda continue consultando na tabela places se existe alguma ocorrência para a variável. Não sei se talvez teria que deixar ele retornar todos os dados e tratar os resultados com php, mas como?

 

Ufa... não sei se fui claro o bastante...

O desafio é grande, quem se habilita a ajudar na solução?

Desde já grato...

Andrey

Compartilhar este post


Link para o post
Compartilhar em outros sites

Playerbr

 

 

muito obrigado pela ajuda,

tentei com 'SELECT places.*, produtos.produto FROM places, produtos WHERE produto LIKE '%tenis%' OR Company_name LIKE '%tenis%'.... GROUP BY usuarioID ....., quase chegamos lá, ele listou um só registro para a ocorrência que eu necessitava quando tinha essa ocorrência na tabela produtos para este usuário, quando havia registro de acordo com a procura na tabela places, mas não havia nada para este usuario na tabela produtos, ele preenchia o campo selecionado da tabela produtos com o primeiro produto cadastrado por esse usuário. O SELECT deveria setar null ou deixar em branco o campo produto, ou os campos que não correspondam a pesquisa...

 

 

 

 

Ainda em busca de uma solução...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.