【问题标题】:Error 1214 when using GROUP BY in my view在我看来使用 GROUP BY 时出现错误 1214
【发布时间】:2015-11-05 15:26:09
【问题描述】:

我的数据库视图有问题。所有其他视图都正常工作,但是当我尝试在查询后面添加 GROUP BY 语句时, 然后我会得到下一个错误:

1214 - 使用的表类型不支持 FULLTEXT 索引

我已将所有表设置为 ISAM,我注意到整个问题出在 GROUP BY 语句中。

我的查询如下所示:

CREATE VIEW `id_winkels`
AS
SELECT 
    `w`.`w_id` AS `w_id`,
    `w`.`k_id` AS `k_id`,
    `w`.`w_naam` AS `w_naam`,
    `w`.`w_logo` AS `w_logo`,
    `w`.`w_homepage` AS `w_homepage`,
    `w`.`w_straat` AS `w_straat`,
    `w`.`w_huisnummer` AS `w_huisnummer`,
    `w`.`w_postcode` AS `w_postcode`,
    `w`.`w_woonplaats` AS `w_woonplaats`,
    `w`.`w_land` AS `w_land`,
    `w`.`w_actief` AS `w_actief`,
    `w`.`w_datum` AS `w_datum`,
    COUNT(`p`.`p_id`) AS `totaal`
FROM `Winkels` `w` 
LEFT JOIN `Producten` `p`
        ON `w`.`w_id` = `p`.`w_id`
GROUP BY `w`.`w_naam`

还有其他选项可以在不使用 group by 的情况下按我的商店计算产品数量吗?

当我在没有 group by 语句的情况下运行查询时,它将在一行中返回我的产品总量。

【问题讨论】:

  • 你为什么还要按w_datum分组?当您按w_datum 分组时,当然每个w_datum 都会得到一个结果行。这是你真正想要的吗?您的问题描述并未表明这一点。
  • 对不起,我后来添加了它。它是 GROUP BY w_naam,所以我无法按商店统计所有产品的数量

标签: sql group-by myisam


【解决方案1】:

由于您只从 Winkels 中选择字段,因此您应该在子查询中获取产品计数,而不是加入表:

CREATE VIEW id_winkels AS 
  SELECT 
    w.w_id AS w_id,
    w.k_id AS k_id,
    w.w_naam AS w_naam,
    w.w_logo AS w_logo,
    w.w_homepage AS w_homepage,
    w.w_straat AS w_straat,
    w.w_huisnummer AS w_huisnummer,
    w.w_postcode AS w_postcode,
    w.w_woonplaats AS w_woonplaats,
    w.w_land AS w_land,
    w.w_actief AS w_actief,
    w.w_datum AS w_datum,
    (
      select count(*)
      from Producten p 
      where p.w_id = w.w_id
    ) AS totaal 
  FROM Winkels w;

【讨论】:

  • 我现在尝试在我的表中进行搜索,但仍然遇到同样的错误。当我不尝试过滤时,查询运行良好。但是当我尝试按字段搜索时,我得到了同样的错误。
  • 呃,什么?您是说不能添加 WHERE 子句吗?或者你还在尝试什么?该错误似乎表明您正在尝试使用 FULL TEXT 功能 (MATCH ... AGAINST),但您的表格类型不符合此要求。在这里查看:stackoverflow.com/questions/963534/mysql-fulltext-indexes-issue。你真的想要使用全文搜索吗?
  • 是的,我真的想要一个完整的文本搜索,我发现我的查询有效,而我没有在我的视图中添加计数部分,所以我现在尝试将它添加到我的查询中。现在剩下的唯一问题是:它计算的是所有产品的总数,而不是商店的总产品
  • 这是我迄今为止的查询顺便说一句:SELECT SQL_CALC_FOUND_ROWS w_id, k_id, w_logo, w_naam, w_actief, w_woonplaats, w_datum ,(SELECT COUNT(w_id) FROM Producten p WHERE p.w_id = w_id)AS 总计FROM id_winkels_checkdefout WHERE (match(w_naam, w_woonplaats) against( :zoeken in boolean mode)) AND $where $order LIMIT $limit",[":zoeken" => $zoekterm]);
  • 不是Winkels 商店和w_id 他们的ID吗?子查询计算w_id 的产品,所以我看不出它怎么可能计算所有产品而不是商店的产品。你一定是误会了。 (顺便说一句:你为​​什么使用count(w_id) 而不是count(*)?它完全一样,但看起来令人困惑,因为你不计算这里的商店,正如count(w_id) 建议的那样。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-08
  • 2018-11-27
  • 2011-09-02
相关资源
最近更新 更多