是什么导致SQLSTATE [42000]:语法错误或访问违规:1064尝试分组表时?
-
16-10-2019 - |
题
我一直在尝试弄清楚是什么导致了什么导致例外,并在尝试为我的收藏品创建一个JOIN并将其与main_table分组。
这是我的Collection.php的代码
<?php
class Companyname_CheckoutComments_Model_Resource_Comment_Collection extends Mage_Core_Model_Resource_Db_Collection_Abstract{
protected function _construct() {
$this->_init('checkoutcomments/comment');
}
public function addCustomerFilter($customer){
$select = $this->getSelect();
if ($customer->getId()){
$select->where('order.customer_id?', $customer->getId());
} else {
//Force empty result set for not logged in customers
$select->where('1=0');
}
$select->join(array('order' => $this->getTable('sales/order')),
'order.entity_id = main_table.order_id',
array('status', 'created_at'));
$select->join(array('order_item' => $this->getTable('sales/order_item')),
'order_item.order_id = main_table.order_id
AND order_item.parent_item_id IS NULL ',
array());
/** Mage_Core_Model_Resource_Helper_Mysql4 */
Mage::getResourceHelper('core')->addGroupConcatColumn($select, 'product_names', 'order_item.name', ', ' );
$select->group('main_table.comment_id');
return $this;
}
}
给我悲伤的台词是:
$select->group('main_table.comment_id');
因为它引发了一个错误,我似乎无法解决
QLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''2') GROUP BY `main_table`.`comment_id`' at line 4
SELECT `main_table`.*, `order`.`status`, `order`.`created_at`, GROUP_CONCAT(order_item.name SEPARATOR ', ') AS `product_names` FROM `checkout_comments` AS `main_table` INNER JOIN `sales_flat_order` AS `order` ON order.entity_id = main_table.order_id INNER JOIN `sales_flat_order_item` AS `order_item` ON order_item.order_id = main_table.order_id AND order_item.parent_item_id IS NULL WHERE (order.customer_id'2') GROUP BY `main_table`.`comment_id`
如果有人知道要使用的正确语法,请您友好建议,或者我错过的代码中存在一些错误。
预先感谢!
解决方案
问题确实是第4行
$select->where('order.customer_id?', $customer->getId());
必须
$select->where('order.customer_id=?', $customer->getId());