none
Pesquisar no front pelo nome mas no back pelo ID RRS feed

  • Pergunta

  • Estou com o seguinte problema, possuo uma tela onde tem um campo de pesquisa usando like por nome mas preciso que internamente a pesquisa seja feita buscando pelo Id. Por exemplo, quero pesquisar pelo funcionário andré mas internamente a query deve pesquisar pelo id. é possível fazer isso ?

    terça-feira, 10 de setembro de 2019 16:03

Respostas

  • Diego,

    Então, é justamente neste cenário que entra a maneira que você esta desenvolvendo, bem como, a forma que a linguagem de programação utilizada na sua aplicação vai permitir que isso seja aplicado.

    Esta query, que você compartilhou:

    select A.NUM_FRE, A.NOME from tb_funcionario a
    where a.id_supervisor = @idsupervisor

    Ela já esta trabalhando com o conceito de uma query parametrizada e dinâmica dentro da aplicação, ao meu ver, basta você mudar a condição no Where para algo similar a este exemplo:

    select A.NUM_FRE, A.NOME from tb_funcionario a
    where a.nome like '%'+@nomefuncionario+'%'

    No caso o parâmetro ou variável @nomefuncionario vai armazenar ou receber justamente o que sendo obtido no textbox que você digita o nome do funcionário.

    Se a sua linguagem de programação permitir, você pode declarar diretamente na sua query o nome do textbox como parâmetro, algo similar a este exemplo:

    select A.NUM_FRE, A.NOME from tb_funcionario a
    where a.nome like '%'+textbox.text+'%'

    Provavelmente esta query será transcrita internamente pelo SQL Server com base na instrução enviada por sua aplicação como uma Ad-hoc query e a mesma será processada e retornada.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    • Marcado como Resposta diego.lk sexta-feira, 13 de setembro de 2019 00:18
    quarta-feira, 11 de setembro de 2019 12:42
  • Deleted
    • Marcado como Resposta diego.lk sexta-feira, 13 de setembro de 2019 00:18
    quarta-feira, 11 de setembro de 2019 13:12

Todas as Respostas

  • Olá Diego.

    Não é possível fazer isso, pois se o seu dado de entrada é o nome, a consulta no banco deverá ser feita por esse nome. 
    Você tem essa demanda de procurar pelo ID por causa de performance?

    Se sim, o que ajudaria é você criar um Full Text Index na coluna Nome e ao invés de usar o Like, usar o CONTAINS.

    A performance é bem melhor.

    https://luanmorenodba.com/2011/10/26/entenda-o-full-text-search/

    https://docs.microsoft.com/pt-br/sql/t-sql/statements/create-fulltext-index-transact-sql?view=sql-server-2017


    Mariana Del Nero /* Se a resposta foi útil, não esqueça de marcá-la */

    terça-feira, 10 de setembro de 2019 16:19
  • Deleted
    terça-feira, 10 de setembro de 2019 16:40
  • Diego,

    Mas acredito que a pesquisa deverá ser feita pelo nome completo e não somente pelo primeiro nome.

    Não é mesmo? Poderia nos descrever como o usuário informa o nome e de que forma deverá ser feita a pesquisa.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    terça-feira, 10 de setembro de 2019 18:57
  • Então, existe uma index com um campo de busca que faz o filtro usando o like, ou seja conforme vai digitando o nome vai aparcendo os resultados. se nessa pesquisa a mesma fosse feita pelo id do funcionario, tudo bem. Problema resolvido. Vou explicar melhor a situação.

    Existe uma tabela chamada funcionário e nela existem supervisores e vendedores, existe uma coluna chamada id supervisor, e é nela que é feito o vínculo do vendedor com o supervisor. todo vendedor deve possuir algum ID nessa coluna id_supervisor, que corresponde ao id do seu supervisor. Já os supervisores sempre ficam com essa coluna nula. 

    A questão é, como faço para na index da pagina,pesquisar pelo nome do supervisor e retornar todos os vendedores associados ao dito cujo ?

    Obrigado as respostas e ajuda de todos vocês.

    quarta-feira, 11 de setembro de 2019 01:44
  • Deleted
    quarta-feira, 11 de setembro de 2019 10:13
  • A pesquisa é pelo nome do supervisor. Conforme vai digitando o nome do mesmo vai aparecendo as opções. Digamos que o supervisor Claudio tem como supervisionado os vendedores Bruno, Adriano e Beatriz. Quando digitar no campo de busca o nome Claudio, vai listar o registro do mesmo, após seleciona-lo, deve retornar o nome desses 3 vendedores, cujo supervisor é o que foi digitado na busca. Entendeu ?
    • Editado diego.lk quarta-feira, 11 de setembro de 2019 11:36
    quarta-feira, 11 de setembro de 2019 11:34
  • Diego,

    Obrigado pelo esclarecimento, vou fazer somente uma observação, com base no que você descreveu:

    Todo vendedor possui um supervisor e os supervisores não possuem alguém acima, teoricamente este tipo de implementação não seria a mais indicada, pois temos um campo ID que aceita valores nulos.

    Então, não consigo entender em qual parte você esta "teoricamente" com dificuldades, como já existe uma query utilizando o operador Like para realizar a busca aproximada conforme o que esta sendo digitado, você possui esta relação, tem os IDs de cada funcionário sendo este vendedor.

    Qual é a dificuldade neste cenário? O que deve ser apresentado em tela, o nome completo, o ID, ambos?

    Acredito que você deve estar utilizando algo similar a uma grid ou até mesmo tabela/matrix para apresentar o resultado da pesquisa na sua aplicação.

    Eu concord com o José Diz, veja que a questão é definir como a aplicação vai apresentar os dados e não como ela vai buscar.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    quarta-feira, 11 de setembro de 2019 11:34
  • Deleted
    quarta-feira, 11 de setembro de 2019 11:40
  • A tela é essa abaixo. Quando digito o nome do supervisor está retornando o próprio, quando eu gostaria que retornasse os seus subordinados (vendedores). 

    A query usada numa API é essa:

    sql.AppendLine("SELECT A.NUM_FRE, A.NOME");

    sql.AppendLine("FROM TB_FUNCIONARIO A");

    sql.AppendLine("WHERE (UPPER(A.NOME) LIKE @VALOR) AND SUPERVISOR = 'S' ");

    parametros.Add("@VALOR", $"%{term.ToUpperInvariant()}%");


    A seguinte query faz o que eu gostaria mas teria que se buscar pelo id do supervisor, coisa que não quero. Quero retornar esses mesmos valores porém buscando pelo nome do supervisor.

    select A.NUM_FRE, A.NOME from tb_funcionario a
    where a.id_supervisor = @idsupervisor


    • Editado diego.lk quarta-feira, 11 de setembro de 2019 11:52
    quarta-feira, 11 de setembro de 2019 11:49
  • A pesquisa é pelo nome do supervisor. Conforme vai digitando o nome do mesmo vai aparecendo as opções. Digamos que o supervisor Claudio tem como supervisionado os vendedores Bruno, Adriano e Beatriz. Quando digitar no campo de busca o nome Claudio, vai listar o registro do mesmo, após seleciona-lo, deve retornar o nome desses 3 vendedores, cujo supervisor é o que foi digitado na busca. Entendeu ?

    Diego,

    Sim.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    quarta-feira, 11 de setembro de 2019 12:36
  • A pesquisa é pelo nome do supervisor. Conforme vai digitando o nome do mesmo vai aparecendo as opções. Digamos que o supervisor Claudio tem como supervisionado os vendedores Bruno, Adriano e Beatriz. Quando digitar no campo de busca o nome Claudio, vai listar o registro do mesmo, após seleciona-lo, deve retornar o nome desses 3 vendedores, cujo supervisor é o que foi digitado na busca. Entendeu ?

    Diego,

    Sim.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    Então como poderia montar essa query ?
    quarta-feira, 11 de setembro de 2019 12:37
  • Diego,

    Então, é justamente neste cenário que entra a maneira que você esta desenvolvendo, bem como, a forma que a linguagem de programação utilizada na sua aplicação vai permitir que isso seja aplicado.

    Esta query, que você compartilhou:

    select A.NUM_FRE, A.NOME from tb_funcionario a
    where a.id_supervisor = @idsupervisor

    Ela já esta trabalhando com o conceito de uma query parametrizada e dinâmica dentro da aplicação, ao meu ver, basta você mudar a condição no Where para algo similar a este exemplo:

    select A.NUM_FRE, A.NOME from tb_funcionario a
    where a.nome like '%'+@nomefuncionario+'%'

    No caso o parâmetro ou variável @nomefuncionario vai armazenar ou receber justamente o que sendo obtido no textbox que você digita o nome do funcionário.

    Se a sua linguagem de programação permitir, você pode declarar diretamente na sua query o nome do textbox como parâmetro, algo similar a este exemplo:

    select A.NUM_FRE, A.NOME from tb_funcionario a
    where a.nome like '%'+textbox.text+'%'

    Provavelmente esta query será transcrita internamente pelo SQL Server com base na instrução enviada por sua aplicação como uma Ad-hoc query e a mesma será processada e retornada.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    • Marcado como Resposta diego.lk sexta-feira, 13 de setembro de 2019 00:18
    quarta-feira, 11 de setembro de 2019 12:42
  • Deleted
    • Marcado como Resposta diego.lk sexta-feira, 13 de setembro de 2019 00:18
    quarta-feira, 11 de setembro de 2019 13:12
  • Obrigado a ajuda de todos. Consegui resolver !
    sexta-feira, 13 de setembro de 2019 01:33
  • Obrigado a ajuda de todos. Consegui resolver !

    Diego,

    Nós que agradecemos, conte conosco.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    sexta-feira, 13 de setembro de 2019 12:23