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これらに 3 桁の余分な数字が含まれているため、これらに a を使用する必要があることです (したがって、これはタイムスタンプと 3 桁です)。

したがって、私はstrtotimePHP で 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

Assuming that the 3 extra digits can range from 000 to 999 then you could do something like this:

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"

This along with an index in timestamp column should give you good performance.

于 2010-11-22T23:52:19.583 に答える
0

クエリのタイムスタンプは文字列であるため、不要な 3 桁を切り捨てることはできません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 に答える