首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取不在另一个表中的数据

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

Stack Overflow用户
提问于 2012-05-24 11:38:43
回答 3查看 80关注 0票数 0

我有两个表,名为测试和结果。

  • 如果考生注册,那么它将被插入到测试表中。
  • 如果考生完成了测试,那么详细信息已经插入到结果表中。

现在,我需要一个查询来比较两个表,并填充那些没有使用候选人id完成测试的详细考生。我正在使用zend框架工作,请指导我,我正在使用此代码,但它不起作用

代码语言:javascript
复制
$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');
EN

回答 3

Stack Overflow用户

发布于 2012-05-24 16:58:25

很抱歉没有回答您的问题,但是为什么不简单地使用带有判别器字段的单个表(例如,这个字段将被称为type ),并以如下方式使用:

  • 如果候选人注册,他将插入类型设置为测试。
  • 如果候选人完成了考试,那么他的类型将改为已完成。
票数 0
EN

Stack Overflow用户

发布于 2012-05-25 20:49:11

也许您忘了在joinLeft中指定条件?

票数 0
EN

Stack Overflow用户

发布于 2012-05-25 22:13:19

来自zend docs

使用joinLeft(表、条件、列)方法左联接。包括左操作数表中的所有行,包括右侧操作数表中的匹配行,如果不存在与左表匹配的行,则填充右侧操作数表中的列为空。

在查询中,您既没有指定条件,也没有指定要返回的列。

例如,您可以这样进行连接:

代码语言:javascript
复制
$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',
             "*"
);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10736758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档