我試圖加載與產品關聯的所有類別,但只應選擇最深的子類別。例如,產品與類別women > trousers > jeans
相關聯,只有jeans
應該可見。獲取產品最低級別的子類別
我想出了到目前爲止的代碼返回正確的查詢,但訪問該集合SQL錯誤被拋出時:SQLSTATE[42S22]: Column not found: 1054 Unknown column 'cat_path' in 'on clause'
/* @var $_categoryNames Mage_Catalog_Model_Resource_Category_Collection */
$_categoryNames = $_product->getCategoryCollection();
$_categoryNames
->joinTable(
'catalog/category',
"entity_id = entity_id",
array('cat_path' => 'path')
)
->getSelect()
->where(
"cat_path not like(CONCAT(path, '/%'))"
);
die($_categoryNames->getSelect());
UPDATE: 感謝blmage我至少能找到一個SQL語句,以獲得正確類別:
SELECT *
FROM `catalog_category_entity`e
WHERE (SELECT COUNT(`entity_id`)
FROM `catalog_category_entity`c
WHERE c.path LIKE (CONCAT(e.path,'%'))
)=1
不能在'WHERE'子句中使用字段別名,和您的查詢將不能工作,因爲'cat_path'實際上是'path'(你在自己參加一個類別)。另外,你應該在字符串上使用'CONCAT'而不是'+'。無論如何,你爲什麼不過濾PHP中的集合? – blmage
感謝您的意見。我想在sql中這樣做,因爲它需要爲每個產品加載,我認爲這樣會更快。你是對的,現在我正在爲自己的類別加入。嘗試使用' - > getSelect() - > join()'。我試圖重現生成至少一個工作查詢的代碼。 –