我需要动态地在相同的表上添加联接......像这样:
// foreach ... as $id
$options['join']['T_Values' . $id] = [
'type' => 'LEFT',
'table' => 't_values',
'conditions' => ['T_Values' . $id . '.t_id = T.id']
];
$options['join']['Values' . $id] = [
'type' => 'LEFT',
'table' => 'values',
'conditions' => ['Values' . $id . '.id = T_Values' . $id . '.value_id', 'Values' . $id . '.v_id' => $id]
];
$options['fields']['x_' . $id] = 'Values' . $id . '.name';
// endforeach
问题是没有选择第二个值 - 它是null。这可以通过将第二个连接类型更改为' INNER'来解决,但这是一个问题,因为T中的现有记录没有结果但T_Values中缺少记录。这种类型的连接可以处理它:
SELECT …
FROM t T
LEFT JOIN (t_values T_Values2
INNER JOIN values Values2 ON
(Values2.id = T_Values2.value_id AND Values2.v_id = 2)
) ON T_Values2.t_id = T.id
LEFT JOIN (t_values T_Values3
INNER JOIN values Values3 ON
(Values3.id = T_Values3.value_id AND Values3.v_id = 3)
) ON T_Values3.t_id = T.id
WHERE T.k_id = 1 GROUP BY T.id
我的问题是:这可以通过查询构建器实现。或者更好......你能建议更简单的方法吗?感谢
答案 0 :(得分:0)
我解决了这个问题"很难"如果有人有类似的问题:
$options['join'][] = [
'type' => 'LEFT',
'table' => '(t_values T_Values' . $id . ' INNER JOIN values Values' . $id . ' ON Values' . $id . '.id = T_Values' . $id . '.value_id AND Values' . $id . '.v_id = ' . $id . ')',
'conditions' => ['T_Values' . $id . '.t_id = T.id']
];