Ir para conteúdo

POWERED BY:

Arquivado

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

Omar~

[RESOLVIDO] Vincular resultados LIKE em duas tabelas

Recommended Posts

Estou precisando da ajuda para montar a seguinte query.

Ao realizar uma consulta usando o operador LIKE em duas colunas de uma tabela, ao qual obtenho o id de um vinculo em outra tabela.

 

No genérico a query está assim sem entrar na outra tabela

Citar

SELECT

  page_link,

  page_sector,  /* AQUI */

  page_content

FROM

  pages

WHERE
   page_title
LIKE

  :datafind

OR

  page_content

LIKE

  :datafind

 

Alí onde tenho a coluna page_sector é o mesmo dado de uma coluna "sector_hash" em outra tabela, ao qual essa tabela armazena os setores, nessa tabela preciso resgatar o valor da coluna "sector_link"

 

Ou seja ao realizar a consulta preciso renderizar que a página encontrada pertence a tal setor, para que possa passar os links corretamente.

Assim sendo o usuário irá buscar pelo título ou conteúdo das páginas nos resultados devem vim o link do setor que essa página pertence e a própria página.

 

Porque passando o hash da página a url fica muito estranha e queria otimizar isso exemplo:

de

https://siteurl/ZR7lGBUIv8YICXUBw2RCP0WgxC7AFe1548702043/pagina

para

https://siteurl/setor/pagina

Compartilhar este post


Link para o post
Compartilhar em outros sites

Omar~

Se eu entendi direito a QUERY abaixo deve resolver o seu problema

 

SELECT tab1.page_link
      ,tab1.page_sector
      ,tab1.page_content
      ,tab2.sector_link
FROM pages tab1 INNER JOIN
     'Nome Da Outra Tabela Aqui' tab2
WHERE  tab1.page_sector = tab2.sector_hash
  AND (tab1.page_title   LIKE :datafind
   OR  tab1.page_content LIKE :datafind)

 

Se o relacionamento for 1 registro na tabela PAGES for 1 para a tabela 'Nome Da Outra Tabela Aqui' então ira retornar 1 registro com as informações que você precisa, agora se o relacionamento não for de 1 para 1 recomendo você adicionar o comando LIMIT 1 no final da query para trazer 1 registro apenas para que você monte o seu LINK.

 

SELECT tab1.page_link,
      ,tab1.page_sector
      ,tab1.page_content
      ,tab2.sector_link
FROM pages tab1 INNER JOIN
     'Nome Da Outra Tabela Aqui' tab2
WHERE  tab1.page_sector = tab2.sector_hash
  AND (tab1.page_title   LIKE :datafind
   OR  tab1.page_content LIKE :datafind)

LIMIT 1

 

Espero ter ajudado

 

Att.

Felipe Coutinho

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Felipe Guedes Coutinho Obrigado.

Logo de cara na lógica fui pelo uso do JOIN, mas fiquei confuso em como montar a sintaxe da query quando usando o LIKE.

Sua ideia funcionou direitinho aqui.

 

Pena que o forum está com com problema na função para dar reput em seu post :glasses:

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por Omar~
      É o seguinte preciso fazer uma consulta em uma tabela cujo existe relação de valores em outra.
      Mas que os resultados só poderão existir da seguinte forma.
      Tabela-B (onde a pesquisa é feita) deve está com a mesmo valor de uma coluna na Tabela-A. Ambas tabelas possuem uma coluna de status (que significa ativos) e em ambas tabelas por essa coluna só podem voltar resultados caso sua coluna referente tenha o status 1. Em resumo são 5 condições para que haja resultado.
      Montei a seguinte sintaxe:
      SELECT sectors.s_status, sectors.s_hash, sectors.s_title, sectors.s_link, pages.p_status, pages.p_title, pages.p_link, pages.p_sector, pages.p_content_b FROM sectors INNER JOIN pages WHERE sectors.s_hash = pages.p_sector AND (pages.p_title LIKE '%{$search}%' OR pages.p_content_b LIKE '%{$search}%') AND (sectors.s_status = '1' AND pages.p_status = '1') ORDER BY pages.p_title ASC  
      Está funcional como previsto. Porém acho que ficou mau feita... Teria uma jeito melhor para fazer?
       
      E mais uma coisa....
      Como a pesquisa busca tanto por título quanto por conteúdo.
      Digamos que eu tenha uma string "teste" como título na coluna "p_title" na tabela "pages" e no mesmo resultado também tenho na coluna a mesma string "teste" em "p_content_b"....
      Exemplo:
      Logo com minha query terei 2 resultados só para uma página.
      Teria como eu filtrar essa situação para que somente o título seja um resultado ignorando o valor da outra coluna? (Obs.: Isso já faço durante o loop de repetição no PHP, mas queria uma forma de fazer na query) "Limitar o resultado não deu certo...."
       
    • Por Omar~
      Estou precisando fazer uma query em uma tabela usando LIKE, mas preciso restringir que somente sejam mostrados os resultados cujo tenha uma das colunas idênticas.
      Exemplo de query (que está errada!!!)
      SELECT     coluna_A,     coluna_B,     coluna_C FROM     tabela WHERE     coluna_A LIKE '%ALGUM_VALOR%' OR     coluna_B LIKE '%ALGUM_VALOR%' AND     coluna_C = 'tenha esse valor' Então preciso pesquisar existência de "algum valor" dentro das colunas A e B da tabela, mas que sejam retornados apenas resultados cujo a coluna C seja apenas um valor, que pode duplicar de registro para registro, mas na mesma tabela possuem outros registros cujo a coluna C não são iguais.
       
      Obs.: Sempre fiz esse processo de filtrar o resultado via PHP, mas queria saber como fazer diretamente na query.

      #EDIT:
      Sendo mais específico
      Digamos registros mais ou menos assim:
       
      SELECT coluna_A, coluna_B, coluna_C FROM tabela WHERE coluna_A LIKE '%João%' OR coluna_B LIKE '%João% AND   coluna_C = 'Carpinteiro'
      Ou seja mesmo que que haja mais de um registro, somente é para trazer os resultados cujo a coluna C for carpinteiro
       
       
       
       
    • Por camargo.2018
      Tou querendo fazer um sistema de like alguém sabe oque estou errando ?
      Pós não tenho muito conhecimento em JavaScript
       
      <script type="text/javascript">
      $(".like2").click(function(){
         function(){
      if($(this).attr("src") == 'img/like-yes.png')
          document.getElementsByid('gosto').src = 'img/like-no.png';
      else
         document.getElementsByid('gosto').src = 'img/like-yes.png';
      }
      });
                  </script>
                  <div class="like" id="<?php echo $post["id"]; ?>">
                      <img class="like2" src="<?php if($like['like'] == "yes"){echo 'img/like-yes.png';}else{ echo'img/like-no.png'; }?>" id="gosto" style="margin-top:10px;width:20px;height:20px;cursor: pointer;margin-left:20px;"><p style="position: absolute;padding-left: 50px;margin-top: -22px;color:#999;cursor: pointer;">Curtir</p>
                  </div>
    • Por Alessandro Almeida
      Prezados,
      Estou precisando somar a coluna QUANTIDADE que são consultadas com um "DISTINCT material".
      Segue código até o "DISTINCT material" 
      ... $busca_query = mysql_query("SELECT distinct material FROM material WHERE material LIKE '%$busca%' AND quantidade LIKE '%$busca1%' ORDER BY material ASC")or die(mysql_error());//faz a busca com as palavras enviadas if (empty($busca_query)) { //Se nao achar nada, lança essa mensagem     echo "Nenhum registro encontrado."; } // quando existir algo em '$busca_query' ele realizará o script abaixo. while ($dados = mysql_fetch_array($busca_query)) { ?>     <tr width="100%">                 <td width="82%"><?php echo "$dados[material]<br />";?></td>             <td width="10%"><?php echo "$dados[quantidade] <br />";?> ...
    • Por Wellington09
      Pessoal, estou com duas duvidas, se alguem puder dar uma dica de onde eu posso estar pesquisando elas eu agradeço(link), pois fazendo uma pesquisa no google não achei o que eu estava procurando.
       
      DUVIDA 1
      Como eu faço para trazer uma pesquisa com LIKE quando eu tenho a seguinte situação.
       
      coluna na tabela MYSQL = titulo
      titulo cadastrado na coluna = BAVETTE COM MOLHO DE FRANGO E PÊRA
       
      SQL utilizado =  (titulo LIKE '%minha palavra chave%')
       
       
       
      busca de palavra chave = frango
      1 pesquisa ok, ACHOU
       
      busca de palavra chave = pera
      2 pesquisa ok, ACHOU
       
      busca de palavra chave = frango e pera
      3 pesquisa ok, ACHOU
       
      busca de palavra chave = frango pera (perceba que não tem a letra E nesta busca )
      4 pesquisa, NÃO ENCONTROU NADA
       
      como eu faço para contornar este tipo de problema ?
       
      DUVIDA 2
      Minha outra duvida é em relação a usar uma junção de LIKE na coluna titulo(var char), descrição(TEXT) e categoria (var char) para encontrar um texto que esta sendo pesquisado.
       
      Sei que não é uma boa pratica usar LIKE, inclusive se for em varias colunas e se a base de dados for grande, mas como faço para contornar estas situações ?
      Alguém poderia dar uma dica ?
       
       
×

Informação importante

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