0

这是我的查询:

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在这些上使用 a 因为它们包含 3 个额外的数字(所以这是一个时间戳加上 3 个数字)。

因此我strtotime在 php 中使用 a 并尝试在数据库中匹配这些,但它们包含额外的 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%" 
4

2 回答 2

3

假设 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列中的索引一起应该为您提供良好的性能。

于 2010-11-22T23:52:19.583 回答
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 是提供给查询的各自时间戳值......)

于 2010-11-22T23:22:49.760 回答