Ir para conteúdo
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

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por Artur Mendonça
      Olá amigos.
      espero que estejam todos bem.
       
      Estou tentando criar uma galeria de imagens e colocar nestas um botão para votação (Gosto como no Facebook).

      Já consegui criar a galeria e colocar o Like nas imagens, mas acontece que quando  as imagens passam para a linha de baixo o botão Like não acompanha a imagem.
       
      Junto uma imagem para exemplificar como está e como deveria ser.
       
      O CSS está assim
      h1 { text-align: center; color: forestgreen; margin: 30px 0 50px; } .container h2 { text-align: center; color: rgb(8, 8, 8); margin: 30px 0 50px; } .gallery { margin: 10px 50px; padding-right: 0px; padding-left: 0px; } .gallery img { width: 230px; padding: 0px; opacity: 0.5; filter: grayscale(10%); transition: 1s; margin-top: 10px; margin-left: 10px; margin-bottom: 10px; margin-right: 0px; border: 2px solid #ccc; border-radius: 10%; } .ilike { display: grid; border-radius: 10%; box-sizing: border-box; text-align: left; padding: 15px; font-size: 20px; vertical-align: top; position: absolute; z-index: 1000; margin-top: 10px; margin-left: 10px; overflow: hidden; color: white; } O código da página da galeria de fotos está assim:
      <div class="gallery"> <?php $sql = "SELECT * FROM tbl_gallery where aid=$aid"; $num_rows = mysqli_num_rows(mysqli_query($conectar, $sql)); $result = mysqli_query($conectar, $sql); while ($row = mysqli_fetch_array($result)) { $gimage = $row['gimages']; $fotoid = $row['gid']; $likes = $row['likes']; ?> <a href="páginapararegistarovoto" ?> "><i class="far fa-thumbs-up ilike" alt="Vote"> <?php echo $likes; ?> </i></a> <i class="inum" > <?php echo "Foto " . $fotoid; ?> </i> <?php echo "<a href='../fotos/$gimage' data-lightbox='mygallery' data-title='Foto n.º: $fotoid'><img src='../thumbnails/$gimage' class='pic'></a>"; } ?> </div>  
       
       

    • 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 />";?> ...
×

Informação importante

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