Нужно знать, если между и как можно использовать вместе или что-то лучше в SQL - PullRequest
0 голосов
/ 23 ноября 2010

Вот мой запрос:

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

Ответы [ 2 ]

2 голосов
/ 23 ноября 2010

Если предположить, что 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 голосов
/ 23 ноября 2010

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

...