function getDistinctGroups($db, $params, $groupBy, $interval = 0) { $where = ""; $reverse = @$params["reverse"]; splitFilters($params, $imageFilters, $demoFilters); if (hasDemographicFilters($params)) { $params = $imageFilters; $where = userFilterCondition($demoFilters); } $questionId = getQuestionId($groupBy); $qtype = getQuestionType($questionId); // group by image filter: meal='Lunch' if ($questionId === "") { $params["table"] = "user_upload"; $params["columns"] = $groupBy; } else { $params = array(); $params["table"] = "user_profile_answer"; $params["columns"] = getAnswerColumn($qtype, $interval); $params["question_id"] = $questionId; $params["reverse"] = $reverse; $params["where"] = $where; } debug("getDistinctGroups", $params); $result = $db->distinct($params); if ($qtype == "number" && $interval > 1) { foreach ($result as $key => $row) { $result[$key] = $row["min"] . ":" . $row["max"]; } } return $result; }
if (!$groupBy) { $results = demographicPortrait($db, $params, $portraitType); //$users = arrayDistinct($results, "username"); $users = filterUsers($db, $params); arrayDistinct($results, "username"); setExists($results); $results = array("all" => $results); } else { //if groupBy is a profile question, translate group=gender => group=Q_0 $questionsByField = arrayIndexBy($questions, "field_name"); if (array_key_exists($groupBy, $questionsByField)) { $qid = $questionsByField[$groupBy]["id"]; $groupBy = "Q_{$qid}"; } $groups = getDistinctGroups($db, $params, $groupBy, $interval); $questionId = getQuestionId($groupBy); $form_answers = null; if ($questionId !== "") { $qtype = getQuestionType($questionId); if (isset($questions[$questionId]["form_answers"])) { $form_answers = arrayIndexBy($questions[$questionId]["form_answers"], "id"); } } debugVar("groups"); $results = array(); foreach ($groups as $groupValue) { if ($groupValue === "NULL") { continue; } $params[$groupBy] = $groupValue; $data = demographicPortrait($db, $params, $portraitType);