2010-11-22 29 views
0

Voici ma question:besoin de savoir si et entre autres peuvent être utilisés ensemble ou quelque chose de mieux dans 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" 

Cela fonctionne très bien, le problème est que je dois utiliser un LIKE sur ces parce qu'ils contient 3 chiffres supplémentaires (il s'agit donc d'un horodatage plus 3 chiffres).

Par conséquent j'utilise un strtotime en php et en essayant de faire correspondre ceux-ci dans la base de données, mais ils contiennent les 3 chiffres supplémentaires. Est-il possible de refaire ce sql ou d'ajouter une clause LIKE pour chacun de ces horodatages?

 "1288929643485" AND "1289010305536" 

Quelque chose comme

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

Pouvez-vous changer les colonnes à DATETIME? – Stephen

Répondre

2

En supposant que les 3 chiffres supplémentaires peuvent varier 000-999 vous pourriez faire quelque chose comme ça :

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" 

Ceci avec un index dans la colonne timestamp devrait vous donner une bonne performance.

0

Depuis les horodatages dans votre requête sont des chaînes, vous pouvez non seulement tronquer les trois chiffres indésirables avec 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 et en supposant @ timestamp2 sont les valeurs d'horodatage respectives fournies à la requête ...)