2014-03-13 33 views
0

我想在一個查詢過濾「在」關鍵字基於陣列上的數據,類似於:如何使用Moodle DB API調用在Where子句中指定數組?

SELECT count(*) as number_of_records, 
     count(CASE WHEN result = 'SUCCESS' THEN 1 END) as successful_builds_no, 
     min(CASE WHEN result = 'FAILURE' THEN 0 ELSE 1 END) as is_success, 
     min(duration) as best_duration, 
     max(build_date) as build_date  
FROM mdl_selenium_results 
WHERE build_date in ('2014-03-13', '2014-03-12') 
GROUP BY build_date 

如何實現,使用Moodle的DB API?

回答

0

如果您正在創建一個在Moodle中使用的SQL查詢,那麼您可以使用IN關鍵字,就像您在示例中所做的一樣。

另外,讓它多一點跨數據庫兼容,使您的查詢的運行快一點時,有在列表中只有一個項目,你可以寫:

list($dsql, $dparam) = $DB->get_in_or_equal(array('2014-03-13', '2014-03-12'), SQL_PARAMS_NAMED); 

$sql = "SELECT count(*) as number_of_records, 
     count(CASE WHEN result = 'SUCCESS' THEN 1 END) as successful_builds_no, 
     min(CASE WHEN result = 'FAILURE' THEN 0 ELSE 1 END) as is_success, 
     min(duration) as best_duration, 
     max(build_date) as build_date  
FROM {selenium_results} 
WHERE build_date $dsql 
GROUP BY build_date"; 

$result = $DB->get_records_sql($sql, $dparams); 

,或者,如果你只是想從給定表中的所有匹配的記錄(再擔心這樣做在PHP中計算),你可以寫:

$result = $DB->get_records_list('selenium_results', 'build_date', array('2014-03-13', '2014-03-12')); 

(我沒有運行任何代碼的上方,所以道歉對於任何錯別字)