0

Magento では、Zend DDL を使用して、テーブルの値を「websites」という単一のフィールドに group_concat() するクエリを作成しています。

where句が追加されるまで、クエリは正常に機能します。

SELECT
  `main_table`.*,
  GROUP_CONCAT(website.website_id) AS `websites`
FROM
  `megamenu_entity` AS `main_table`
   LEFT JOIN `megamenu_website` AS `website`
   ON main_table.entity_id = website.megamenu_id
WHERE
  (websites = '1')
GROUP BY `main_table`.`entity_id`

エラーが発生します:

SQLSTATE [42S22]: 列が見つかりません: 1054 不明な列 'websites' が 'where 句' にあります

どうしてこれなの?誰でもこれで私を助けることができますか? 理想的には Zend DDL で。これが現在行っていることです。

$collection->getSelect()->joinLeft(
  array('website' => $collection->getTable('megamenu/megamenu_website')),
  "main_table.entity_id = website.megamenu_id",
  array('websites' => new Zend_Db_Expr('GROUP_CONCAT(website.website_id)'))
)->group('main_table.entity_id');

ありがとう

4

3 に答える 3

1

WHERE句は列の別名を認識しません。GROUP BY列の別名は、ORDER BYおよびHAVING句で使用できます。

次のように、元の列名を使用するようにクエリを更新しました。

SELECT
  `main_table`.*,
  GROUP_CONCAT(website.website_id) AS `websites`
FROM
  `megamenu_entity` AS `main_table`
   LEFT JOIN `megamenu_website` AS `website`
   ON main_table.entity_id = website.megamenu_id
WHERE
  (website.website_id = '1')
GROUP BY `main_table`.`entity_id`
于 2013-02-07T10:56:57.290 に答える
0

このクエリを試してください..

SELECT
  `main_table`.*,
  GROUP_CONCAT(website.website_id) AS `websites`
FROM
  `megamenu_entity` AS `main_table`
   LEFT JOIN `megamenu_website` AS `website`
   ON main_table.entity_id = website.megamenu_id
WHERE
  ((GROUP_CONCAT(website.website_id)) = '1')
GROUP BY `main_table`.`entity_id`

whereがgroupの前に実行されるため、クエリが機能しません。

于 2013-02-14T05:24:55.950 に答える
0

以下のコードを試してください

SELECT * FROM 
(                     
SELECT
`main_table`.*,
GROUP_CONCAT(website.website_id) AS `websites`
FROM
`megamenu_entity` AS `main_table`
LEFT JOIN `megamenu_website` AS `website`
ON main_table.entity_id = website.megamenu_id ) E
WHERE
(E.websites = '1')
GROUP BY `main_table`.`entity_id`
于 2013-02-07T10:57:30.853 に答える