我有两个名为test和result的表。
现在我需要一个查询来比较两个表,并使用候选ID填充那些未完成测试的候选人。我正在使用zend框架工作请指导我 我正在使用此代码,但它不起作用
$dbTableInfo = $this->getDbTable()->info();
$select->from(array(
'c1' => 'test'),
array('c1.candidate_id',
"CONCAT( c1.first_name,
' ',
c1.last_name ) AS full_name",
'c1.active',
'c1.sendlink',
'c1.date_added',
'c1.username',
'c1.date_modified',
'c1.test_id')
);
$select->joinLeft(array('re'=>'result'));
$select->where("c1.business_id='" . $cid . "' AND 'c1.candidate_id NOT IN(re.candidate_id)'");
$select->order('c1.candidate_id');
答案 0 :(得分:0)
很抱歉没有回答您的问题,但为什么不简单地使用带有 discriminator 字段的单个表格,例如 type ,并使用就这样:
答案 1 :(得分:0)
也许你忘了在joinLeft中指定条件?
答案 2 :(得分:0)
来自zend docs:
使用joinLeft(table,condition,[columns])方法LEFT JOIN。所有 包含左操作数表中的行,匹配来自的操作数 包含右操作数表,右操作数中的列 如果没有与左表匹配的行,则表填充NULL。
并且在您的查询中,您既没有指定条件也没有指定要返回的列。
例如,您可以像这样进行连接:$select->from(array(
'c1' => 'test'),
array('c1.candidate_id',
"CONCAT( c1.first_name,
' ',
c1.last_name ) AS full_name",
'c1.active',
'c1.sendlink',
'c1.date_added',
'c1.username',
'c1.date_modified',
'c1.test_id')
);
$select->joinLeft(
array('re'=>'result'),
'"c1".candidate_id = "re".candidate_id',
"*"
);