Ir para conteúdo

Arquivado

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

andreval

resultado de consulta duplicado

Recommended Posts

Ola pessoal

 

quando faço a pesquisa de 1 palavra tudo fica certo

se fizer de duas ou mais, ele repete de acordo com o

numero de palavras pesquisadas, seque codgio

 

exemplo de resultado com duas palavras

39 | 244 | RECURSOS HUMANOS | IRPF | 2016-04-10 | 2016-04-30 | 2016-04-19 | certidão de casamento | 8f75fd02b40c418cb259a93a7c9b9a29.jpg | ARQUIVADO / DIGITALIZADO | 2016-04-10 22:25:55 | INSITE CONSULTORIA | ADM39 | 244 | RECURSOS HUMANOS | IRPF | 2016-04-10 | 2016-04-30 | 2016-04-19 | certidão de casamento | 8f75fd02b40c418cb259a93a7c9b9a29.jpg | ARQUIVADO / DIGITALIZADO | 2016-04-10 22:25:55 | INSITE CONSULTORIA | ADM

 

codigo da consulta:

//rotina de busca

$busca = @$_REQUEST["busca"];
if ($busca<>"") {
$palavra = explode(" ", $busca);
$totalPalavras = count($palavra);
for($i = 0; $i < $totalPalavras; $i++){
$consultaUsuario = @$consultaUsuario." OR $campoBusca like '%".$palavra[$i]."%'";
}
}else{
$consultaUsuario = "OR $campoBusca like '%".$busca."%'";
}
$buscaUsuario = "WHERE 1=1 ".$consultaUsuario;
echo $buscaUsuario;
$SQL = mysql_query("SELECT * FROM $tabela
$buscaUsuario
ORDER BY $tabela.$campoId DESC
LIMIT $inicio,$limite") OR DIE(mysql_error());
//sql da paginação
$consulta = mysql_query("SELECT * FROM $tabela $buscaUsuario") OR DIE(mysql_error());
//rotina de contagem de paginas
$total_registros = mysql_num_rows($consulta);
$total_paginas = Ceil($total_registros / $limite);
?>
codigo da mostra do resuldado:
<?php while($RF = mysql_fetch_array($SQL)){ ?>
<form method="post" action="<?php echo $arquivoadd?>">
<tr>
<td><?php echo $RF["hstId"];?></td>
<td><?php echo date('d/m/y', strtotime($RF["hstData"]));?></td>
<td><?php echo $RF["hstAcao"];?></td>
<td><?php echo $RF["hstTabela"];?></td>
<td><?php
if($busca == ""){
echo $RF["hstBusca"];
} else {
$pesquisa = explode(" ", $busca);
for ($i = 0; $i < count($pesquisa); $i++) {
$resposta = str_ireplace(trim($pesquisa[$i]), trim("<span style='background-color:#FFFF00'><b>$pesquisa[$i]</b></span>"), $RF["hstBusca"]);
echo $resposta;
}
}
?>
</td>
</tr>
</form>
<?php } ?>
GRATO

Compartilhar este post


Link para o post
Compartilhar em outros sites

estou usando mysql

 

--
-- Estrutura da tabela `tb_historico`
--
CREATE TABLE `tb_historico` (
`hstId` int(11) NOT NULL,
`hstData` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
`hstAcao` varchar(1) DEFAULT NULL,
`hstTabela` text,
`hstBusca` text
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Compartilhar este post


Link para o post
Compartilhar em outros sites

exemplo de resultado com duas palavras


39 | 244 | RECURSOS HUMANOS | IRPF | 2016-04-10 | 2016-04-30 | 2016-04-19 | certidão de casamento | 8f75fd02b40c418cb259a93a7c9b9a29.jpg | ARQUIVADO / DIGITALIZADO | 2016-04-10 22:25:55 | INSITE CONSULTORIA | ADM39 | 244 | RECURSOS HUMANOS | IRPF | 2016-04-10 | 2016-04-30 | 2016-04-19 | certidão de casamento | 8f75fd02b40c418cb259a93a7c9b9a29.jpg | ARQUIVADO / DIGITALIZADO | 2016-04-10 22:25:55 | INSITE CONSULTORIA | ADM



exemplo do sql:


SELECT * FROM tb_historico


WHERE 1=1 OR hstBusca LIKE '%"244"%' OR hstBusca LIKE '%"DIGITALIZADO"%'

ORDER BY tb_historico.hstId DESC

LIMIT 1,50") OR DIE(mysql_error())

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, gere o busca apenas em uma instrução LIKE. Dica substitua os espaços em branco por %.

 

Algo parecido com isso

SELECT * FROM tb_historicoWHERE 1=1 OR hstBusca LIKE '%"244"%"DIGITALIZADO"%' 
ORDER BY tb_historico.hstId DESC

Compartilhar este post


Link para o post
Compartilhar em outros sites

obrigado pela dica, mas não funcionou, não separou nenhum resultado.

 

e o que acho o meu principal problema esta na exibição dos resultados, pois

ele acha os resultado ai quando vai para exibir ele exibi de acordo com o

numero de palavras pesquisadas, se for 2 duas vezes a pesquisa, a primeira

com a primeira paravra marcada e a segunda exibe com a segunda palavra

marcada.

 

repare dentro do FOR que esta o erro

codigo de exibição:

 

<?php while($RF = mysql_fetch_array($SQL)){ ?>
<form method="post" action="<?php echo $arquivoadd?>">
<tr>
<td><?php echo $RF["hstId"];?></td>
<td><?php echo date('d/m/y', strtotime($RF["hstData"]));?></td>
<td><?php echo $RF["hstAcao"];?></td>
<td><?php echo $RF["hstTabela"];?></td>
<td><?php
if($busca == ""){
echo $RF["hstBusca"];
} else {
$pesquisa = explode(" ", $busca);
for ($i = 0; $i < count($pesquisa); $i++) {
$resposta = str_ireplace(trim($pesquisa[$i]), trim("<span style='background-color:#FFFF00'><b>$pesquisa[$i]</b></span>"), $RF["hstBusca"]);
echo $resposta;
}
}
?>
</td>
</tr>
</form>
<?php } ?>
Grato

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por lezão
      Bom dia, galera!
      Tudo bem com vcs?
       
      Tenho uma tabela Itens com os campos Descrição e nome do produto, quando eu coloco no select.
      Eu gostaria que me retorna-se, todos os nomes dos produtos e retornar apenas uma vez a Descrição.
       
      Select com ORDER BY
      "SELECT DISTINCT c.id, c.descricao, i.id_categoria, i.descricao_produto, i.id_item, i.nome_produto, i.imagem, i.preco, i.qntdade FROM tab_categoria AS c JOIN tab_itens AS i ON c.id = i.id_categoria WHERE c.id = i.id_categoria AND i.id_empresa = '$id_empresa' ORDER BY c.descricao" Select com GROUP BY,  até da certo, mas retorna apenas um produto.
      "SELECT DISTINCT c.id, c.descricao, i.id_categoria, i.descricao_produto, i.id_item, i.nome_produto, i.imagem, i.preco, i.qntdade FROM tab_categoria AS c JOIN tab_itens AS i ON c.id = i.id_categoria WHERE c.id = i.id_categoria AND i.id_empresa = '$id_empresa' GROUP BY c.descricao"  
      Veja como esta ficando do jeito que eu estou fazendo, com ORDER BY
      Select_com_ORDER_BY  
       
      E com o GROUP BY
      Select_com_GROUP_BY
       
    • Por Omar~
      Opa!
      Então.... como eu faria uma query que me retornasse apenas colunas cujo seu valor seja duplicado estou meio confuso como proceder?
      Digamos uma query para exemplificar melhor:
      SELECT * FROM tabela
      E teria um resultado assim:
      $resultado = [ 0 => [ 'id' => 1, 'repetido' => 'abcde' ], 1 => [ 'id' => 2, 'repetido' => 'aaaaa' ], 2 => [ 'id' => 3, 'repetido' => 'abcde' ], 3 => [ 'id' => 4, 'repetido' => 'bbbbb' ], ]; Então no índice 0 e no índice 2 tenho a coluna com o valor repetido.
      Como eu poderia esta fazendo a query de forma que me retornasse somente os resultados que são repetidos?
      Lembrando que não indicarei o valor de busca, pois foi isso que me pegou e não estou sabendo como proceder... 
       
      Até onde eu sei usei a lógica e não deu certo:
      SELECT id, repetido FROM tabela GROUP BY repetido HAVING COUNT(repetido) > 1 Pois dessa forma só me retorna o último índice repetido e eu preciso de todos que forem repetidos.
    • Por biakelly
      Olá Tudo bem?
       
      Poderiam me ajudar com a seguinte condição:
      <?php if ($row['facebook'] != "") { echo '<a class="btn btn-dark btn-social mx-2" href="<?php echo $row['facebook']; ?>"><i class="fab fa-facebook-f"></i></a>'; } else { echo ''; } ?>  
      Estou recebendo o seguinte erro:
      Parse error: syntax error, unexpected 'facebook' (T_STRING), expecting ';' or ',' in C:\xampp\htdocs\biazinha\inicial.php on line 371
       
       
      A linha 371 é essa:
      echo '<a class="btn btn-dark btn-social mx-2" href="<?php echo $row['facebook']; ?>"><i class="fab fa-facebook-f"></i></a>';  
       
       
    • Por Hamilcar
      Bom dia!
      Peguei um sistema para atualizar para funcionar, o problema é que foi criado uma ligação de tabelas meio louca aqui, vou tentar explicar, tem uma tabela usuários que tem um id, e tem uma outra tabela em que a usuários é ligada e nela pode ter um ou mais usuários, o problema é que foi colocado os ids na mesma linha separados por um caracter, e os usuários se repetem, vou colocar abaixo para exemplificar:
      Tabela Usuarios/id 
                   id1, id2, id3...
       
      Tabela Escala
                  id_escala1_idUser -> id1|id2|id3...
                  id_escala2_idUser -> id1|id2|id3...
       
      Como vou gastar um tempo para refazer novamente o banco de dados, queria fazer funcionar momentaneamente, e gostaria da ajuda para tentar se possível fazer uma consulta que me traga todos os usuarios listados na tabela escala
    • Por mamotinho
      Olá, pessoal mais uma vez venho pedi a ajuda de vocês estou com um problema ao roda uma query que montei, eu sou iniciante na area e não tenho muito conhecimento então o codigo que fiz foi parte de meu conhecimento básico. bom o que eu quero resolver nessa query é o seguinte, eu quero consultar uma tabela e nela pega todos os registros com a a data vencida e lista ela dentro do while em seguida retornar dentro desse if o valor da coluna de cada uma exemplo de como fiz e ficou com loop infinito.

       
      declare @id int declare @getdate datetime select @id = IDCadastrado, @getdate = RegDate from BancoTeste.dbo.MinhaTabela where RegDate < getdate() while @id is not null begin select * from BancoTeste.dbo.MinhaTabela where IDCadastrado = @id end quando eu executo isso ai ele executa infinitamente o valor do primeiro registro repetidamente.
×

Informação importante

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