Нужно знать, если между и вроде можно использовать вместе или что-то лучше в SQL
-
27-09-2019 - |
Вопрос
Вот мой запрос:
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"
Это работает просто хорошо, проблема в том, что я должен использовать LIKE
На них, потому что они содержат 3 дополнительных цифры (так что это временная метка плюс 3 цифры).
Поэтому я использую strtotime
В PHP и попытка сопоставить их в базе данных, но они содержат дополнительные 3 цифры. Есть ли способ, которым я могу повторить этот SQL или добавить LIKE
Пункт для каждого из этих временных метров?
"1288929643485" AND "1289010305536"
Что-то типа
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%"
Решение
Предполагая, что 3 дополнительных цифры могут варьироваться от 000 до 999, тогда вы можете сделать что-то подобное:
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"
Это наряду с индексом в timestamp
Столбец должен дать вам хорошую производительность.
Другие советы
Поскольку временные метки в вашем запросе являются строки, не могли бы вы не обрезать нежелательные три цифры с 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)
(Предполагая, что @ timestamp1 и @ timestamp2 - соответствующие значения времени времени, прилагаемые к запросу ...)