Estrutura
1 tabela chamada: scan
2 colunas nomeadas: id e data
Problema
Eu tenho duas consultas de trabalho, um SELECT e depois um INSERT que gostaria de mesclar criando um INSERT onde a condição é igual a 0.
Consulta 1
Mostrar '1' se a última linha de ID no banco de dados tiver a data de varredura de hoje, caso contrário, mostrar '0' quando nenhuma data de hoje estiver presente.
SELECT
COUNT(scan.date) AS datecheck
FROM scan
WHERE scan.id = (SELECT
MAX(scan.id) AS datecheck
FROM scan
WHERE scan.date = CURDATE())
Consulta 2
Se não houver entrada para hoje, significando um resultado de '0', crie uma nova linha com ID+1 e a data atual.
INSERT INTO `scan`(`id`, `date`) SELECT (MAX(id)+1), CURDATE() FROM scan;
Estou tentando há horas sem sorte ainda, ficaria grato se você pudesse me dizer onde estou errando e me informar qual é a consulta correta. Obrigada.
Reformulando sua consulta, parece que você simplesmente deseja verificar se não há nenhuma linha com a data de hoje. É um pouco complicado torná-lo um Insert condicional:
Para fazê-lo funcionar mesmo com uma tabela vazia, mude para
(COALESCE(MAX(id),0)+1)
Consulta 1
Mostra
1
se a linha de ID mais recente no banco de dados tem a data de varredura de hoje, caso contrário, mostra0
.Pode ser escrito de forma mais simples (e mais eficiente):
e (se gostarmos de ofuscação):
Consulta 2
Se o resultado da consulta anterior for
0
, insira uma nova linha comID + 1
e a data atual.Observação: todas as consultas acima verificam apenas a linha com o valor mais recente (mais alto)
id
. Seu enunciado é ambíguo. Pode haver casos em que uma linha com menorid
tenha a data atual comodate
valor. Não está claro o que você quer que aconteça nesse caso!Se você quiser verificar a data mais alta da tabela, provavelmente precisará substituir o
ORDER BY scan.id DESC
porORDER BY scan.date DESC
, que verificará a data mais alta (e se é a data atual).Se você quiser verificar toda a tabela em busca de linhas com a data atual, será necessário substituí-la por
WHERE scan.date <= CURDATE() ORDER BY scan.date DESC
, que verificará toda a tabela em busca de linhas com a data atual.