0
我想用分組子句過濾集合。在SQL中,會看起來像:Magento:使用分組子句過濾收藏集
SELECT * FROM `my_table` WHERE col1='x' AND (col2='y' OR col3='z')
如何我「翻譯」這與->addFieldToFilter(...)
過濾收集?
謝謝!
我想用分組子句過濾集合。在SQL中,會看起來像:Magento:使用分組子句過濾收藏集
SELECT * FROM `my_table` WHERE col1='x' AND (col2='y' OR col3='z')
如何我「翻譯」這與->addFieldToFilter(...)
過濾收集?
謝謝!
如果您收藏是一個EAV類型,那麼這個效果很好:
$collection = Mage::getResourceModel('yourmodule/model_collection')
->addAttributeToFilter('col1', 'x')
->addAttributeToFilter(array(
array('attribute'=>'col2', 'eq'=>'y'),
array('attribute'=>'col3', 'eq'=>'z'),
));
但是,如果你堅持一個平坦的桌面,我不認爲addFieldToFilter
作品完全一樣的方式。一種選擇是直接使用選擇對象。
$collection = Mage::getResourceModel('yourmodule/model_collection')
->addFieldToFilter('col1', 'x');
$collection->getSelect()
->where('col2 = ?', 'y')
->orWhere('col3 = ?', 'z');
但是,這是失敗的運營商的順序。你會得到像SELECT * FROM my_table WHERE (col1='x') AND (col2='y') OR (col3='z')
這樣的查詢。該OR
並不優先這裏,繞過它意味着更加具體......
$collection = Mage::getResourceModel('yourmodule/model_collection')
->addFieldToFilter('col1', 'x');
$select = $collection->getSelect();
$adapter = $select->getAdapter();
$select->where(sprintf('(col2 = %s) OR (col3 = %s)', $adapter->quote('x'), $adapter->quote('y')));
它是不安全的傳遞值未加引號的,這裏的適配器被用來安全地說出來了。
最後,如果col2
和col3
實際上是相同的,如果你的OR-ing一列中的值,那麼你可以使用這個速記:
$collection = Mage::getResourceModel('yourmodule/model_collection')
->addFieldToFilter('col1', 'x')
->addFieldToFilter('col2', 'in'=>array('y', 'z'));
感謝clockworkgeek!因爲'Mage :: getResourceModel('core/url_rewrite_collection')'代表了一個平坦的表格,我不得不採用「更具體」的方式:) – Jake 2011-03-09 13:24:58
可惜收藏界面並不總是那麼整潔。有時它最適合用於解決方案。 – clockworkgeek 2011-03-09 13:37:42