2010-11-22 4 views
0

Вот мой запрос:нужно знать, если между ними и т.п. могут быть использованы вместе или что-то лучше в SQL

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%" 
+0

Можете ли вы изменить столбцы на DATETIME? – Stephen 2010-11-22 23:21:52

ответ

2

Предполагая, что 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 колонке должен дать вам хорошую производительность.

0

Поскольку временные метки в запросе являются строки, вы можете не только укоротить нежелательные три цифры с 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 являются соответствующие значения временной метки, подаваемые на запрос ...)