1

我正在使用带有 Views 和 Better Exposed Filters 的 Drupal 7,因此我可以使用带有复选框的分类术语搜索内容节点。我只有大约 25 条内容和 10 个分类术语复选框。当我选中所有框时,我收到了这个错误(我只能在视图预览中看到):

SQLSTATE[42000]:语法错误或访问冲突:1104 SELECT 将检查超过 MAX_JOIN_SIZE 行;检查您的 WHERE 并使用 SET SQL_BIG_SELECTS=1 或 SET MAX_JOIN_SIZE=# 如果 SELECT 没问题

我发现了一些建议,建议使用以下代码来解决这个问题:

mysql_query("set sql_big_selects=1");
  1. 如果这是正确的方法,那么应该在哪里使用此代码?
  2. 这种方法是否解决了写得不好的查询,如果是,有解决方案吗?

谢谢你的帮助。

4

2 回答 2

1

这个问题出现在 Drupal.org 上。要点是sql_big_selects在您的主机上设置0为是有原因的,因此您应该联系您的管理员/支持人员以更改此设置。

于 2012-12-09T14:11:05.243 回答
0

我想出了一个解决方案;我很好奇这是否是正确的长期。

我用 grep-ed 我的整个站点来查找配置文件。我找到了sites/default/settings.php。它相当擅长描述如何使用它。此文件存在安全问题,因此它的默认权限设置为完全排除写入权限。我使用 chmod 466 将其设置为编辑,然后使用 chmod 444 将其设置回来。不要忘记这样做。

我找到了未注释的代码并添加了将 SQL_BIG_SELECTS 设置为 1 的最后一个数组元素。仍然想知道 Better Exposed Filters 生成的 SQL 代码是否不好。无论如何,这暂时修复了错误。

 $databases = array (
  'default' => 
  array (
    'default' => 
    array (
      'database' => 'name_one',
      'username' => 'name_two',
      'password' => 'not_telling_you',
      'host' => 'localhost',
      'port' => '',
      'driver' => 'mysql',
      'prefix' => '',
      'init_commands' => array(
        'big_selects' => 'SET SQL_BIG_SELECTS=1',
      ),
    ),
  ),
);
于 2012-12-09T17:21:53.493 回答