Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql ActiveRecord执行原始sql_Mysql_Ruby On Rails_Activerecord - Fatal编程技术网

Mysql ActiveRecord执行原始sql

Mysql ActiveRecord执行原始sql,mysql,ruby-on-rails,activerecord,Mysql,Ruby On Rails,Activerecord,我尝试创建带有中间结果的表,特别是报表。 我正在做的是: ActiveRecord::Base.connection.execute(sql_query) sql\u查询是: SET SQL_SAFE_UPDATES=0; DROP TABLE IF EXISTS _by_people_daily; CREATE TEMPORARY TABLE _by_people_daily AS SELECT #{date_int} AS date_i

我尝试创建带有中间结果的表,特别是报表。 我正在做的是:

 ActiveRecord::Base.connection.execute(sql_query)
sql\u查询是:

SET SQL_SAFE_UPDATES=0;

      DROP TABLE IF EXISTS _by_people_daily;

      CREATE TEMPORARY TABLE _by_people_daily
      AS
      SELECT #{date_int} AS date_int,
             memberships.user_id AS user_id,
             ci.community_id,
             ci.content_id,
             contents.composite_type AS content_type,

             COUNT(views.id) AS views,
             COUNT(comments.id) AS comments,
             COUNT(shares.id) AS shares,
             COUNT(likes.id) AS likes,
             COUNT(uploads.id) AS uploads
      FROM community_items AS ci
        JOIN memberships ON memberships.community_id = ci.community_id
        JOIN contents ON ci.content_id = contents.id
        JOIN (SELECT '#{day_begin}' as start_date, '#{day_end}' as end_date) AS dates
        LEFT JOIN contents AS uploads
               ON uploads.id = ci.content_id
              AND uploads.user_id = memberships.user_id
              AND uploads.created_at BETWEEN dates.start_date AND dates.end_date
        LEFT JOIN comments
               ON comments.content_id = ci.content_id
              AND comments.user_id = memberships.user_id
              AND comments.created_at BETWEEN dates.start_date AND dates.end_date
        LEFT JOIN shares
               ON shares.content_id = ci.content_id
              AND shares.user_id = memberships.user_id
              AND shares.created_at BETWEEN dates.start_date AND dates.end_date
        LEFT JOIN likes
               ON likes.content_id = ci.content_id
              AND likes.user_id = memberships.user_id
              AND likes.created_at BETWEEN dates.start_date AND dates.end_date
        LEFT JOIN views
               ON views.viewable_id = ci.content_id
              AND views.viewable_type = 'Content'
              AND views.user_id = memberships.user_id
              AND views.created_at BETWEEN dates.start_date AND dates.end_date
      WHERE COALESCE(views.id, comments.id, shares.id, likes.id, uploads.id ) IS NOT NULL
        #{ " AND users.company_id = #{@company.id} " if @company }
      GROUP BY memberships.user_id, ci.community_id, ci.content_id, contents.composite_type ;

      DELETE FROM intermediate_by_people WHERE date_int = #{date_int} ;

      INSERT INTO intermediate_by_people
            (date_int, user_id, community_id, content_id, content_type, views, comments, shares, uploads, likes)
      SELECT date_int, user_id, community_id, content_id, content_type, views, comments, shares, uploads, likes
      FROM _by_people_daily ;
我每次都会出错

ActiveRecord::StatementInvalid: Mysql2::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DROP TABLE IF EXISTS _by_people_daily;
但当我将查询传递给mysql客户端时,它工作正常


我做错了什么?如何使用ActiveRecord执行sql语句?您是否尝试转义查询

DROP TABLE IF EXISTS `_by_people_daily`
以下划线开头的表在我看来很可疑

更新:


看看我在谷歌上找到了什么:

你有没有尝试逃避你的查询

DROP TABLE IF EXISTS `_by_people_daily`
以下划线开头的表在我看来很可疑

更新:


看看我在google上发现了什么:

ActiveRecord的MySQL连接默认只能执行一条语句。要执行多条语句,创建连接时需要将客户机多条语句(65536)作为选项传递。代码可能如下所示:

ConnectionAdapters::MysqlAdapter.new(mysql, logger, [host, username, password, database, port, socket, 65536], config)

您可以在mysql gem中找到
ConnectionAdapters::MysqlAdapter.new
,并在
config/initializers
中重写该方法。是一个详细的指南。

ActiveRecord的MySQL连接默认只能执行一条语句。要执行多条语句,创建连接时需要将客户机多条语句(65536)作为选项传递。代码可能如下所示:

ConnectionAdapters::MysqlAdapter.new(mysql, logger, [host, username, password, database, port, socket, 65536], config)

您可以在mysql gem中找到
ConnectionAdapters::MysqlAdapter.new
,并在
config/initializers
中重写该方法。是一个详细的指南。

我重命名了表格,并尝试注释掉一些它没有帮助的标准。我重命名了表格,并尝试注释掉一些它没有帮助的标准。指向详细指南的链接已损坏。您可以更新或删除它吗?今天,您可以将带有
多语句的数组传递到
数据库.yml中的
标志
选项。请参阅详细指南的链接已损坏。您可以更新或删除它吗?今天,您可以将带有
多语句的数组传递到
数据库.yml中的
标志
选项。看见