Otimizando PHP/MySQL: Concatenando Partes de um Registro e Criando Novas Informações – Clube da Informática
Nosso maior público, no desenvolvimento de sistemas personalizados, são empresas com foco em eventos e congressos, dia desses um dos nossos clientes precisou de uma solução imediata com um evento feito sem o nosso sistema. A massa de registros dos inscritos para o evento veio sem um campo, muito comum para esse tipo de segmento, que é o "nome para crachá", onde se espera que o participante coloque como quer ser identificado, e limita-se o número de caracteres para não extrapolar o tamanho da etiqueta que se utiliza na credencial.
A massa era grande, aproximadamente 1200 participantes e estava alocado em servidor alheio, não poderíamos fazer nenhuma modificação na base do evento, formação de conteúdo em novo campo, etc. Então utilizamos uma combinação de funções para solucionar o problema, partimos da proposta que os participantes não escolheriam seus nomes para a credencial e sim que essa identificação seria formada pelo primeiro nome e o último sobrenome. Veja como ficou:
Upper(concat(SUBSTRING_INDEX(`cadastrogeral`.`nome`,' ',1),' ',SUBSTRING_INDEX(`cadastrogeral`.`nome`,' ',-1))) AS `cracha`
`cadastrogeral`
No exemplo acima se temos no campo "nome" o conteúdo: "José Pedro dos Santos" teremos como "crachá" o retorno "JOSÉ SANTOS".
Upper: deixa todas as palavras que retornaram a seleção com a letra maíuscula.
SUBSTRING_INDEX(campo,caracter diferencial,índice), no primeiro caso do exemplo acima pegamos o grupo de caracteres até o primeiro espaço em branco, partindo do começo do registro. Já na segunda parte fazemos a mesma puxada só que o índice "-1" faz a busca começar do final do registro.
AS cria um alias para tratarmos na puxada já nas linhas de código.
Sei que poderíamos fazer esse processo via PHP, mas temos que concordar que dessa forma economizamos linhas e processo de programação e processamento e já que vamos ter que fazer uma consulta ao banco de dados que ela já venha pronta.
Esses processos não mudam muito o tempo da puxada, ainda mais se você pensar que o processo era individual, ou seja, na hora do credenciamento, portando a pesquisa era limitada por um WHERE, era específica, retornarva um só registro e fazia o processo de concatenção com as partes do nome.