在Zend PHP Framework中执行内部联接

时间:2016-07-15 07:46:03

标签: php mysql zend-framework zend-db

我想在两个表上执行内连接。

表A -

ITEM_ID

ITEM_TITLE

VARx前提

表B -

ITEM_ID

变化

someVar

这就是我使用RAW SQL查询完成此操作的方法。

$sql = 'SELECT tableA.item_id, tableY.item_title AS Name, 5 * varX +  5 * count(*) AS myScore 
FROM tableA 
INNER JOIN tableY ON tableA.item_id=tableY.item_id 
WHERE someVar=\'8\' 
GROUP BY item_id
ORDER BY myScore DESC
LIMIT 10';
$stmt = $this->_db->prepare($sql);
$stmt->execute();
$result = $stmt->fetchAll();

现在我想使用Zend Query来做这件事。

这就是我写的 -

$data = $this->_db->select()
->from(array('tablA'=>'tableA'), array('item_id', 'item_title'), 'myScore'=>'(5*'tableA'.'varX') + 5*count(*)')
->joinInner(array('tablB'=>'tableB'), 'tablA'.'item_id' = 'tablB'.'item_id')
->where('someVar = 8')
->GROUP('item_id')
->order('myScore DESC')
->limit(10);

$dataResult = $this->_db->fetchAll($data);

但是我收到了这个错误 -

 syntax error, unexpected '=>' (T_DOUBLE_ARROW), expecting ',' or ')'

in - > from(array(' tablA' =>' tableA'),数组(' item_id',&#39 ; item_title'),' myScore' =>'(5 ' tableA'。' varX')+ 5 * count ()&#39)

我不知道该怎么做,因为我已经阅读了官方文档,但仍然无法解决这个问题。任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:1)

引号在您的代码中以错误的方式使用。此外,似乎你已经使用'myScore'字段的不必要的第三个参数。它应该放在第二个参数中。尝试以下内容:

...
$data = $this->_db->select()
->from(array('tablA'=>'tableA'), array('item_id', 'item_title', 'myScore'=>'(5 * tableA.varX) + 5*count(*)'))
->joinInner(array('tablB'=>'tableB'), 'tablA.item_id = tablB.item_id')
->where('someVar = 8')
->group('tablA.item_id')
->order('myScore DESC')
->limit(10);