Ir para conteúdo
Omar~

Melhorar a sintaxe

Recommended Posts

É 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:

Citar

Título: Teste de expressão

Conteúdo: Fazendo o teste

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

 

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 gustavodubarbosa
      Estou criando uma página que realize monitoramento de atividades.
      No meu código PHP defini uma variável que busca a data atual, depois passei o parâmetro de conexão com o banco de dados, depois criei um while para buscar as informações, dentro do while criei um if, a condição if é que se a variável data for igual a data cadastrada na atividade, exiba toda a atividade cadastrada. Mas o problema é que o if não está controlando essa condição, está passando direto e exibindo tudo.
      <?php $number = ('23'); $data = date("Y-m-d"); echo "$data"; /*Aqui realizo a conexão com o banco de dados, passo os dados para conectar, caso dê algum erro, o sistema me retorna uma mensagem de erro*/ $conect = mysqli_connect('localhost','root','','projeto_pessoal') or die ('Erro na conexão com o banco de dados'); /*Aqui passo o comando para realizar a busca no banco de dados, aplicando o filtro de pesquisa*/ $result_pesquisa = "SELECT * FROM cadastrar_atividade"; /*Neste momento, mando a execução, preciso passar como parametro a variável com a conexão e a variável com o comando, caso dê erro, será exibido uma mensagem*/ $resultado_pesquisa = mysqli_query($conect, $result_pesquisa); /*Aqui é aberto um laço de repetição para fazer uma varredura no banco de dados, em seguida realizo a exibição do que foi encontrado*/ ?> <h1>Resultado da Pesquisa</h1> <?php while($rows_pesquisa = mysqli_fetch_array($resultado_pesquisa)){ if($rows_pesquisa['prazo'] == $data) echo '<p class="title">'.'ID da atividade: '.'</p>'.'<p class="result">'.$rows_pesquisa['id'].'<br>'.'</p>'; echo '<p class="title">'.'Nome da atividade: '.'</p>'.'<p class="result">'.$rows_pesquisa['nome_atividade'].'<br>'.'</p>'; echo '<p class="title">'.'Descrição da atividade: '.'</p>'.'<p class="result">'.$rows_pesquisa['desc_atividade'].'<br>'.'</p>'; echo '<p class="title">'.'Prioridade: '.'</p>'.'<p class="result">'.$rows_pesquisa['prioridade'].'<br>'.'</p>'; echo '<p class="title">'.'Prazo: '.'</p>'.'<p class="result">'.$rows_pesquisa['prazo'].'<br>'.'</p>'; echo 'carregado'; echo '<hr></hr>'; } ?>  
    • Por Omar~
      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
       
      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
    • Por mauspinola
      Sou novato em php/mysql e estou com uma emergência p resolver na loja. O problema é a sintaxe, pois não sei ainda.
      A lógica da rotina eu já tenho. Preciso que alguém possa por favor me ajudar nisso pois é uma emergência das grandes!
      Eu tenho uma tabela, chamada "caixa" nela dois campos "faltapagar" e "status".
      Quando um produto não está pago, o campo "faltapagar" fica com valor acima de '0' ou seja, fica com valor do saldo a pagar, e o campo "status" fica com valor 'pendente'.
      E sempre que um produto é totalmente pago, o campo "faltapagar" fica '0' e o código ao ler isso, muda o campo "status" para 'sucesso' e o cliente recebe um email com a liberação do produto para retirada. Até ai está certo.
      Mas começou a acontecer um problema justo na saída do programador e estou com uma emergência enorme aqui na loja que eu mesmo terei que resolver.
      O problema é o seguinte: 
      Devido a um erro de execução que eu ainda n descobri a origem, o campo "status" tem mudado o valor para 'sucesso' com "faltapagar" sem estar '0', e isso está fazendo produtos não pagos ficarem com status de pago. Está dando um problema muito sério com os clientes, e é uma emergência muito grande resolver isso hoje!!! Por isso preciso muito de uma ajuda aqui bem objetiva, de quem puder me ajudar.
      Uma solução rápida e paleativa que encontrei aqui é complementar um código que no momento da execução olhe na tabela "caixa" e faça assim: Se "status" está com valor 'sucesso' com "faltapagar" tendo um valor acima de '0' então alterar "status" para valor 'pendente'. 
      Ou até mesmo se fosse o caso, fazer também um script roando no crontab em que de minuto em minuto examinasse a tabela "caixa" e comparar os campos "faltapagar" e "status", quando "status" estiver com valor 'sucesso' sem que "faltapagar" esteja com valor '0', esse script iria corrigir o valor 'sucesso' para 'pendente'.
      A lógica do que é para ser feito eu já sei, mas o problema é a sintaxe, que não sei.
      Alguém , me ajuda a montar esse script? É uma emergência!!
      Desde já agradeço muito!
    • 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
       
       
       
       
×

Informação importante

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