通过关系和联接,我正在尝试获取每个客户的最新帖子。 但我真的没办法。我收到错误: 列已存在:1060重复列名'custID'
基于我在这里和谷歌搜索它可能是*但我已删除所以所有表列都是由名称指定的所以我不明白为什么我的列已经存在?
$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;
答案 0 :(得分:0)
由于您的两个表中包含字段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'));