Precisa saber se entre e curtir pode ser usado em conjunto ou algo melhor no SQL
-
27-09-2019 - |
Pergunta
Aqui está minha consulta:
SELECT count(*)
FROM table_testcase_execution
WHERE campaign_session_id = any(SELECT campaign_session_id
FROM table_campaign_session
WHERE campaign_session_name = 'sitename')
AND timestamp BETWEEN "1288929643485" AND "1289010305536"
Isso funciona muito bem, o problema é que eu tenho que usar um LIKE
NESSE porque eles contêm 3 dígitos extras (por isso é um registro de data e hora mais 3 dígitos).
Portanto, estou usando um strtotime
no PHP e tentando corresponder a eles no banco de dados, mas eles contêm os 3 dígitos extras. Existe uma maneira de refazer este SQL ou adicionar um LIKE
Cláusula para cada um desses registros de data e hora?
"1288929643485" AND "1289010305536"
Algo como
SELECT count(*)
FROM table_testcase_execution
WHERE campaign_session_id = any(SELECT campaign_session_id
FROM table_campaign_session
WHERE campaign_session_name = 'sitename')
AND timestamp between LIKE "1288929643%" AND "1289010305%"
Solução
Supondo que os 3 dígitos extras possam variar de 000 a 999, então você pode fazer algo assim:
select count(*) from table_testcase_execution
where campaign_session_id = any(
SELECT campaign_session_id
FROM table_campaign_session
WHERE campaign_session_name = 'sitename')
AND timestamp >= "1288929643000" AND timestamp <= "1289010305999"
Isso junto com um índice em timestamp
A coluna deve lhe dar um bom desempenho.
Outras dicas
Como os registros de data e hora em sua consulta são strings, você não pode apenas truncar os três dígitos indesejados com SUBSTRING()
?
select count(*)
from table_testcase_execution
where campaign_session_id = any(SELECT campaign_session_id FROM table_campaign_session WHERE campaign_session_name = 'sitename')
AND timestamp between SUBSTRING(@timestamp1, -3) AND SUBSTRING(@timestamp2, -3)
(assumindo @timestamp1 e @timestamp2 são os respectivos valores de data e hora fornecidos à consulta ...)