Archive for the ‘MySQL’ Category

Selecionar registros duplicados no banco de dados

Para localizar linhas duplicadas no MySQL você pode utilizar Having.

Exemplo abaixo:

SELECT 
	COUNT(*) AS contador,
	campo_desejado
FROM
	tabela
GROUP BY
	campo_desejado
HAVING
	COUNT(*) > 1

Desta forma, a coluna campo_desejado trará o valor que está duplicado e a coluna contador trará a quantidade de vezes que o valor se repete.

Simples assim!

Alternativa para a função LAST_DAY do MySQL

No MySQL, existe a simpática função LAST_DAY(). Como o nome sugere, ela pega o last day, o último dia do mês, de acordo com a data passada por parâmetro.

Ela é ótima para isso; ela funciona; e funciona bem!

Mas há um pequeno detalhe: LAST_DAY() está disponível a partir do MySQL 4.1.1.

A maioria das pessoas que leem este post, nunca enfrentaram e nem nunca precisarão enfrentar este problema. Porém, existem alguns desbravadores (como eu), que já passaram por isso (ou vão passar), já precisaram pegar o último dia do mês (ou vão precisar), em um servidor precário, onde existia um MySQL inferior ao 4.1.1.

São nestas horas que se consegue mostrar a criatividade!

Criei então uma alternativa ao LAST_DAY(), que também funciona muito bem, só não é tão simples. Aprecie:

DAYOFMONTH(DATE_SUB(CONCAT(YEAR(dt_nascimento),'-',MONTH(DATE_ADD(dt_nascimento,INTERVAL 1 MONTH)),'-01'),INTERVAL 1 DAY))

Buscar registro anterior e próximo no MySQL

A necessidade é a seguinte: Preciso pegar o id anterior e o próximo id de certo registro em questão; necessário em um blog, por exemplo. Infelizmente não existem no MySQL as funções NEXT() e PREV()… Poderiam existir não é?

Mas, não existindo, me obrigou a pesquisar. Não encontrando nada de bom por aí, me obrigou a pensar e encontrei a solução, utilizando subquerys. Considerando que 2 é o id atual em questão, fica assim:

SELECT * FROM tabela WHERE id = 2 OR id = (SELECT MAX(id) FROM tabela WHERE id < 2) OR id = (SELECT MIN(id) FROM tabela WHERE id > 2)

No caso de serem ids sequenciais, o retorno seriam os dados cujo ids fossem 1, 2 e 3. Se por exemplo o id 3 tivesse sido excluído, o retorno então seria 1, 2 e 4… E assim por diante.

Foi útil para você?