获取不在另一个表中的数据

时间:2012-05-24 11:38:43

标签: php zend-framework

我有两个名为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');

3 个答案:

答案 0 :(得分:0)

很抱歉没有回答您的问题,但为什么不简单地使用带有 discriminator 字段的单个表格,例如 type ,并使用就这样:

  • 如果候选人注册他将插入 设置为 test
  • 如果候选人完成了测试,那么他的类型将更改为已完成

答案 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',
             "*"
);