我有一个包含表格的数据库:问题、答案、响应和应答者。问题有答案,答案有应答,应答者拥有应答(应答者可以有多个应答)。
我试图通过将所有通过选择某个问题的特定答案的受访者对相关问题的回答归零来建立相关性。那么,那些回答自己是18 - 20岁的人还回答了什么呢?
技巧是我想在多个应答者和多个答案中做到这一点。例如,18 - 20岁喜欢绿色的人还喜欢什么:
我目前以"或"的方式工作,其中我添加的每个额外的answer_id吸引选择两个答案之一的受访者:
$cFilters = array() of answer_ids;
$respondents = Auth::user()->account->respondents()
->whereHas('responses', function($q) use($cFilters) {
$q->whereIn('responses.answer_id', $cFilters);
})->get();
我最终想让他们以"answers"的方式工作,在另一个answer_id中添加只显示选择了由answer_ids识别的两个答案的受访者,不能完全弄清楚。以下是我到目前为止所尝试的,没有引发错误,但似乎也不能正常工作:
$cFilters = array() of answer_ids;
$respondents = Auth::user()->account->respondents()
->whereHas('responses', function($q) use($cFilters) {
foreach($cFilters as $answer_id) {
$q->where('responses.answer_id', $answer_id);
}
})->get();
我不得不求助于原始SQL,但它工作:
$query = 'SELECT * FROM respondents
WHERE id IN ( ';
$i = 1;
foreach($cFilters as $answer_id) {
$query = $query . 'SELECT respondent_id FROM responses WHERE answer_id=' . $answer_id;
if($i < count($cFilters)) {
$query = $query . ') AND id IN (';
}
$i++;
}
$query = $query . ')';
$respondents = DB::select( DB::raw($query) );