MDL-59774 analytics: Fix sql_compare_text usage

Replace a distinct + join by an exists, which suits better what we need to do.
This commit is contained in:
David Monllao 2017-08-09 08:55:19 +02:00 committed by David Monllao
parent f3625f47c5
commit 88777c570c

View File

@ -84,15 +84,9 @@ class manager {
$params = array();
$fields = 'am.id, am.enabled, am.trained, am.target, ' . $DB->sql_compare_text('am.indicators') .
', am.timesplitting, am.version, am.timecreated, am.timemodified, am.usermodified';
$sql = "SELECT DISTINCT $fields FROM {analytics_models} am";
if ($predictioncontext) {
$sql .= " JOIN {analytics_predictions} ap ON ap.modelid = am.id AND ap.contextid = :contextid";
$params['contextid'] = $predictioncontext->id;
}
$sql = "SELECT am.* FROM {analytics_models} am";
if ($enabled || $trained) {
if ($enabled || $trained || $predictioncontext) {
$conditions = [];
if ($enabled) {
$conditions[] = 'am.enabled = :enabled';
@ -102,6 +96,10 @@ class manager {
$conditions[] = 'am.trained = :trained';
$params['trained'] = 1;
}
if ($predictioncontext) {
$conditions[] = "EXISTS (SELECT 'x' FROM {analytics_predictions} ap WHERE ap.modelid = am.id AND ap.contextid = :contextid)";
$params['contextid'] = $predictioncontext->id;
}
$sql .= ' WHERE ' . implode(' AND ', $conditions);
}
$sql .= ' ORDER BY am.enabled DESC, am.timemodified DESC';