Jump to content
juliosertori

Agrupar Palavras Com e Sem Caracteres Especiais

Recommended Posts

Opa tudo bem?

 

Tenho uma query que agrupa por CIDADE, o problema é que o cliente pode digitar a cidade, então as vezes digita com e sem caracter especial, por exemplo: São Paulo, e Sao Paulo, como posso agrupar os 2?

 

"SELECT sum(p.total_pedido) as totalpedidos, p.id_empresa, p.id_cliente, c.id, c.cidade FROM pedidos AS p JOIN clientes AS c ON p.id_cliente = c.id WHERE p.id_empresa = '".$_CPD['CompanyId']."' AND p.finalizado = '1' AND MONTH(p.data_pedido) = '$mes_atual' group by c.cidade order by totalpedidos desc limit 0,10"

 

Share this post


Link to post
Share on other sites
2 minutos atrás, juliosertori disse:

Da para incrementar function direto na query?

 

Não consigo alterar a estrutura toda, é um sistema pronto que já tem muitas conexoes com isso!

Dá, algo como

 

Select remove_acentos(cidade) as cidade from ...

 

Não é a melhor das soluções mas às vezes é o que tem parar o jantar.

Share this post


Link to post
Share on other sites

Estou com a função aqui por exemplo

 

function tirarAcentos($string){
    return preg_replace(array("/(á|à|ã|â|ä)/","/(Á|À|Ã|Â|Ä)/","/(é|è|ê|ë)/","/(É|È|Ê|Ë)/","/(í|ì|î|ï)/","/(Í|Ì|Î|Ï)/","/(ó|ò|õ|ô|ö)/","/(Ó|Ò|Õ|Ô|Ö)/","/(ú|ù|û|ü)/","/(Ú|Ù|Û|Ü)/","/(ñ)/","/(Ñ)/"),explode(" ","a A e E i I o O u U n N"),$string);
}

Mas não estou conseguindo inserir ela no GROUP BY c.cidade 

Share this post


Link to post
Share on other sites

A function tem de ser de Banco , não conheço detalhes de MySql mas creio que tenha de ser de Banco e deve seguir as regras de Group by ou seja , pela menos em Oracle , aparecer no Group by se citada no select.

 

 

Share this post


Link to post
Share on other sites

Tente algo do tipo

 

Select remove_acentos(cidade) cidade,count(*) qtd

From tabela

Group by remove_acentos(cidade)

 

Senão

Crie uma view

Share this post


Link to post
Share on other sites

Tenta por view

 

Ou

 

Select  cidade,count(*) qtd

From (Select remove_acentos(cidade) cidade_editada

           From tabela) v

Group by cidade_editada

Share this post


Link to post
Share on other sites

@juliosertori Dar para fazer tudo antes através do PHP, mas você terá que ficar atento ao banco de dados um planejamento anterior sobre como vai trafegar dados poderia ter evitado algumas situações mais complexas no futuro.

Pois o que é mais viável em um banco de dados é nunca ter nada com acentuação ou certos tipos de caracteres.

 

Exemplo, se vou salvar São Paulo no banco posso utilizar no php htmlentities('São Paulo')

O que para antes de processo temos a string: São Paulo

Um melhor já prevendo letras em caixa alta e baixa mb_strtolower(htmlentities('São Paulo'))

O resultado então temos: são paulo

 

Para o html isso não influencia em nada por se tratar de entidades porque mesmo que printe isso o navegador irá sempre renderizar São Paulo pois ã significa "ã"

Assim sendo todas vez que for passar a string São Paulo para a aplicação essa conversão é feita para que se enquadre com o que está escrito no banco de dados.

 

Além do mais você pode ter funções que removem acentuação, espaços, certos caracteres etc..

No entanto isso sempre vai ter que ser coeso com a informação que irá buscar no banco de dados.

 

Mas também podemos também forçar a utilização de recursos no html para sempre enviar  informações corretas (Lógico sempre lembrando de tratar as informações antes de usar-las).

A mais simples seria:

<select>
  <!--
	No caso aqui eu estou prevendo que no banco de dados esteja:
	São-Paulo
	e não:
	São Paulo
	-->
  <option value="São-Paulo">São Paulo</option>
</select>

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By OSVALDO ARANTES JÚNIOR
      Boa tarde,  estou desenvolvendo uma consulta no php/mysql em diversas colunas. E gostaria de saber
      se existe um caracter especial para listar todos os dados, minha quere esta organizada da seguinte forma
       
      $query = sprintf("SELECT * FROM operacao  WHERE data_operacao BETWEEN '$data_inicial_rel' AND '$data_final_rel' AND estado_operacao = ' ' ORDER BY id_operacao ASC ;");
       
      quando declaro o valor do estado_operacao ele lista perfeitamente o valor, agora minha dúvida é se existe um 
      carater para listar todos os valores... para que eu use como value no opition do select, passar o valor TODOS pra a query
       
      desde já agradeço a atenção.
    • By k9studio
      Olá Meus amigos,
       
      Minha tabela a baixo quero atualizar a order mais da erro, algum pode dar um help
      como os dados são armazenados:
      namesystem setting   value   order (honda)    (name)   (Honda)   1 (honda)    (xtts)   (ok)      0    (honda)   (visible)  (on)      0   
      erro ao atualizar.
       
      UPDATE system SET order = '1' WHERE namesystem ='honda'
      Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'order = '1' WHERE WHERE namesystem ='honda'
      CREATE TABLE `system` (   `namesystem` text COLLATE utf8_unicode_ci NOT NULL,   `setting` text COLLATE utf8_unicode_ci NOT NULL,   `value` text COLLATE utf8_unicode_ci NOT NULL,   `order` int(1) NOT NULL,   KEY `namesystem_setting` (`namesystem`(32),`setting`(32)),   KEY `setting_value` (`setting`(32),`value`(32)) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
    • By k9studio
      Olá Amigos,
      tenho essa tabela abaixo e estou apanhando para listar os dados e fazer validação,
      alguém pode ajudar como chamar os dados e validar mostrar o nome somente se estiver visible=on  

       
      CREATE TABLE `system` (   `namesystem` text COLLATE utf8_unicode_ci NOT NULL,   `setting` text COLLATE utf8_unicode_ci NOT NULL,   `value` text COLLATE utf8_unicode_ci NOT NULL,   `order` int(1) NOT NULL,   KEY `namesystem_setting` (`namesystem`(32),`setting`(32)),   KEY `setting_value` (`setting`(32),`value`(32)) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; como os dados estão na tabela:
       
      namesystem setting   value   order (honda)    (name)   (Honda)   1 (honda)    (xtts)   (ok)      0    (honda)   (visible)  (on)      0    (toyota)    (name)   (Toyota)  2 (toyota)    (xtts)   (ok)      0    (toyota)  (visible)  (on)      0    
    • By Giuliano Maffei
      Oi Pessoal, sou novo por aqui.
      Agradeço se alguém puder me ajudar.
      Tenho um banco de dados com a tabela abaixo:
      DB pets
      ------------------------------------------------------------------------------------
      | id | pet_tutor | pet_name | pet_species | pet_breed  |
      ------------------------------------------------------------------------------------
      | 1  |        José |             Rex |                   1 |    Vira-latas |
      | 2  |      Paulo |      Bichano |                  2 |        Siamês |
      | 3  |       João |             Max |                  1 | Lhasa-apso |
      ------------------------------------------------------------------------------------
       
      Fiz o código abaixo:
      $species_lang = array('0' => 'Selecionar','1' => 'Cachorro', '2' => 'Gatos', '3' => 'Acarás');
       
      SELECT (pets.id as id, pet_tutor, pet_name, {(" . $species_lang['pet_species'] . ")}, pet_breed FROM pets)
       
      Resultado:
      -----------------------------------------------------------------------------------
      | id | pet_tutor | pet_name | pet_species | pet_breed  |
      ------------------------------------------------------------------------------------
      | 1  |        José |             Rex |                        | Vira-latas |
      | 2  |       Paulo |    Bichano |                        |     Siamês |
      | 3  |        João |           Max |                        | Lhasa-apso |

      -----------------------------------------------------------------------------------
      Porque não consigo carregar o campo 'pet_species' com a raça do pet. Alguém tem uma luz pra me ajudar?
       
      Obrigado
    • By EvertonFD
      Ola estou desenvolvendo com intuito de estudo um sistema que tem um ranking e parrei em uma situação que travou tudo na cabeça,
      tenho 2 tab (agenda e uma ranking)  eu pensei em por os dados na agenda (time-a time-b gol-a gol-b v - d- e ) e somente somar e contar com php na hora de exibir.
      mas quando faço isso não consigo especificar a soma quando o time cai no enfrentamento (expl. time-a Arsenal x time-b PSG ) se no proximo confronto o Arsenal cair como timeb não consigo pegar os valores dele estou tentando assim.
      SELECT t.nome_time, COUNT(v_a + v_b), SUM(gola + golb) FROM agenda a INNER JOIN times t ON a.id=t.id WHERE T.nome_time='Sao Paulo' e o resultado que ele me traz não é o correto como podem ver na imagem deveria ser 9 gols e 2 vitorias, se alguem puder ajudar agradeço ou dar uma nova ideia sobre a logica


×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.