Posted on: March 10, 2021 07:52 PM
Posted by: Renato
Views: 1969
Usando SELECT REPLACE com MySQL
Recentemente, precisei comparar o conteúdo de duas colunas em um banco de dados MySQL que armazenava as imagens grandes e pequenas para uma postagem no blog. Todos os pequenos começam com "pequeno" seguido de um número e os maiores com "grande" seguido de um número. Entre na função REPLACE () para se livrar de pequeno / grande e faça a comparação! Neste post, mostro como usar a função replace no MySQL.
Uso básico
A função REPLACE () tem três parâmetros:
a string ou nome da coluna para fazer a substituição
o que procurar
e o que substituí-lo
O exemplo a seguir substitui a parte ‘aaa’ de ‘aaa bbb ccc’ por ‘xyz’ e a coluna retornada da consulta SQL conterá ‘xyz bbb ccc’:
SELECT REPLACE('aaa bbb ccc', 'aaa', 'xyz');
Se você estivesse fazendo isso na coluna "foo", você faria o seguinte:
SELECT REPLACE(foo, 'aaa', 'xyz');
Meu exemplo
No meu caso, eu tinha uma coluna chamada ‘image_small’ e ‘image_large’ com dados de exemplo como:
+------------+--------------+-------------+
| content_id | image_small | image_large |
+------------+--------------+-------------+
| 1 | small1.jpg | big1.jpg |
| 26 | small26.jpg | big26.jpg |
| 27 | small27.jpg | big27.gif |
| 24 | small24.jpg | big24.jpg |
| 419 | small208.gif | big419.gif |
+------------+--------------+-------------+
Eu queria substituir "pequeno" por uma string vazia e "grande" por uma string vazia na consulta de seleção e, em seguida, ver se eles eram iguais em cada coluna. Isso pode ser feito com a seguinte consulta:
SELECT content_id,
REPLACE( image_small, 'small', '' ) AS image_small,
REPLACE( image_large, 'big', '' ) AS image_large
FROM content
Os dados resultantes têm a seguinte aparência:
+------------+-------------+-------------+
| content_id | image_small | image_large |
+------------+-------------+-------------+
| 1 | 1.jpg | 1.jpg |
| 26 | 26.jpg | 26.jpg |
| 27 | 27.jpg | 27.gif |
| 24 | 24.jpg | 24.jpg |
| 419 | 208.gif | 419.gif |
+------------+-------------+-------------+
Estendendo meu exemplo com IF ()
O único problema com o exemplo acima é que agora preciso verificar cada linha e ver quais correspondem e quais não correspondem. A consulta pode ser estendida com um IF () para produzir 1 ou 0 se os nomes dos arquivos (sem as partes pequenas e grandes) corresponderem.
SELECT content_id,
REPLACE(image_small, 'small', '') as image_small,
REPLACE(image_large, 'big', '') as image_large,
IF(REPLACE(image_small, 'small', '') = REPLACE(image_large, 'big', ''), 1, 0) AS matches
FROM content
Isso adiciona uma coluna extra chamada "corresponde", que exibirá 1 se os dois nomes de arquivo corresponderem ou 0 se não forem:
+------------+-------------+-------------+---------+
| content_id | image_small | image_large | matches |
+------------+-------------+-------------+---------+
| 1 | 1.jpg | 1.jpg | 1 |
| 26 | 26.jpg | 26.jpg | 1 |
| 27 | 27.jpg | 27.gif | 0 |
| 24 | 24.jpg | 24.jpg | 1 |
| 419 | 208.gif | 419.gif | 0 |
+------------+-------------+-------------+---------+
Função que fiz para resolver um problema com &:
$sql = "SELECT id, DATA, arquivo, acionamento, ordem, chassi, autor, gene, categoria, tipo,
REPLACE( descricao, '&', '' ) AS descricao
FROM cadrencfoto WHERE acionamento = '$id' ORDER BY ordem ASC, id ASC;";
Agora é muito mais fácil ver quais têm os mesmos nomes de arquivo, uma vez que o texto "pequeno" e "grande" foram removidos combinando as funções REPLACE () e IF () do MySQL.
-https://electrictoolbox.com/mysql-select-replace/
Donate to Site
Renato
Developer