Zend framework 列已存在于带有Zend的LeftJoin中

Zend framework 列已存在于带有Zend的LeftJoin中,zend-framework,Zend Framework,通过关系和加入,我试图获得每个客户的最新帖子。 但我并没有真正让它发挥作用。我得到一个错误: 列已存在:1060个重复的列名“custID” 根据我在这里和谷歌上的搜索,它可能是*的,但我已经删除了,所以所有表列都是按名称指定的,所以我不明白为什么我的get列已经存在 $db = $this->getDbTable(); // create sub query $subSql = $db->select() ->setIntegrity

通过关系和加入,我试图获得每个客户的最新帖子。 但我并没有真正让它发挥作用。我得到一个错误: 列已存在:1060个重复的列名“custID”

根据我在这里和谷歌上的搜索,它可能是*的,但我已经删除了,所以所有表列都是按名称指定的,所以我不明白为什么我的get列已经存在

    $db = $this->getDbTable();

// create sub query
$subSql = $db->select()
                ->setIntegrityCheck(false)
                ->from(array('s1' => 'sales'), array('s1.custID', 's1.saledate'))
                ->joinLeft(array('s2' => 'sales'), 's1.custID = s2.custID AND s1.saledate < s2.saledate', array('s2.custID', 's2.saledate'))
                ->where('s2.custID IS NULL')
                ->limit(1);

//main query
    $sql = $db->select()
                     ->setIntegrityCheck(false)
                     ->from(array('customers' => 'customers'), array("customers.custID"))
                     ->joinLeft(array('sale_tmp' => new Zend_Db_Expr('(' . $subSql . ')')), "customers.custID = sale_tmp.custID", array('sale_tmp.custID'));




//echo $sql->assemble();    
//exit; 

$resultSet = $db->fetchAll($sql);
return $resultSet;
$db=$this->getDbTable();
//创建子查询
$subSql=$db->select()
->setIntegrityCheck(假)
->from(数组('s1'=>'sales')、数组('s1.custID','s1.saledate'))
->joinLeft(数组('s2'=>'sales'),'s1.custID=s2.custID和s1.saledate其中('s2.custID为NULL')
->限额(1);
//主查询
$sql=$db->select()
->setIntegrityCheck(假)
->来自(数组('customers'=>'customers')、数组(“customers.custID”))
->joinLeft(数组('sale_tmp'=>new Zend_Db_Expr('('.$subSql')),“customers.custID=sale_tmp.custID”,数组('sale_tmp.custID');
//echo$sql->assemble();
//退出;
$resultSet=$db->fetchAll($sql);
返回$resultSet;

由于您的两个表都有字段
custID
,因此在如何填充联接表中的
custID
值方面存在冲突

您需要为其中之一提供列别名。
joinLeft()
方法的签名是:


joinLeft($table,$condition,[$columns])

第三个参数
$columns
可以是一个列的直接整数索引数组(正如您正在使用的),也可以是一个关联数组,其值为列,但其键为列别名

因此,不妨尝试以下方法:

// create sub query
// add alias for the custID field
$subSql = $db->select()
    ->setIntegrityCheck(false)
    ->from(array('s1' => 'sales'), array('s1.custID', 's1.saledate'))
    ->joinLeft(array('s2' => 'sales'), 's1.custID = s2.custID AND s1.saledate < s2.saledate', array('sales_custID' => 's2.custID', 's2.saledate'))
    ->where('s2.custID IS NULL')
    ->limit(1);

// main query
// add alias for custID field
$sql = $db->select()
     ->setIntegrityCheck(false)
     ->from(array('customers' => 'customers'), array("customers.custID"))
     ->joinLeft(array('sale_tmp' => new Zend_Db_Expr('(' . $subSql . ')')), "customers.custID = sale_tmp.custID", array('temp_custID' => sale_tmp.custID'));
//创建子查询
//为custID字段添加别名
$subSql=$db->select()
->setIntegrityCheck(假)
->from(数组('s1'=>'sales')、数组('s1.custID','s1.saledate'))
->joinLeft(数组('s2'=>'sales'),'s1.custID=s2.custID和s1.saledate's2.custID','s2.saledate'))
->其中('s2.custID为NULL')
->限额(1);
//主查询
//为custID字段添加别名
$sql=$db->select()
->setIntegrityCheck(假)
->来自(数组('customers'=>'customers')、数组(“customers.custID”))
->joinLeft(数组('sale_tmp'=>new Zend_Db_Expr('('.$subSql')),“customers.custID=sale_tmp.custID”,数组('temp_custID'=>sale_tmp.custID');