与cfquery maxrows的cf10问题

时间:2012-08-20 12:49:41

标签: mysql coldfusion coldfusion-10

我最近将一个应用程序从cf9移到了cf10

运行设置了maxrows的查询时,收到以下错误:

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 'OPTION SQL_SELECT_LIMIT=1000' at line 1

查询在cf9和cf8上运行正常。

进行一些游戏,看起来cf10正在使用OPTION SQL_SELECT_LIMIT=1000;进行查询,但mySQL无法识别它。如果我从查询中取出maxrows设置它运行正常。

另外值得注意的是,查询有两个外连接。

在转向cf10时,是否有其他人遇到类似问题?

提前感谢任何建议

以下是完整查询

<cfquery name="details" datasource="#Application.ds#" maxrows="#arguments.maxrows#">
          SELECT b.booking_id,
                    DATEDIFF(b.check_out,b.check_in) as nights,
                    b.package_id,
                    b.beds_cot,
                    b.date_booked,
                    b.beds_king,
                    b.status,
                    b.tstamp as booking_tstamp,
                    g.ext_ref_id as guest_ext_ref_id,
                    g.title,
                    g.first_name,
                    g.surname,
                    g.full_name,
                    g.tstamp as guest_tstamp,
                    r.room_id,
                    r.ext_ref_id as room_ext_ref_id,
                    r.name as room_name,
                    r.description as room_description,
                    p.package_id,
                    p.ext_ref_id as package_ext_ref_id,
                    p.name as package_name,
                    p.description as package_description,
                    p.date_start as pacakge_date_start,
                    p.date_end as package_date_end

          FROM guest_booking as b 
          JOIN guest as g
          LEFT JOIN room as r ON b.room_id = r.room_id
          LEFT JOIN packages as p on b.package_id = p.package_id

          WHERE b.provider_id = #arguments.provider_id#
            and b.guest_id = g.guest_id
          <cfif isdefined("arguments.status")>
              and b.status = #arguments.status#
          </cfif>
          <cfif isdefined("arguments.booking_id")>
              and b.booking_id = #arguments.booking_id#
          </cfif>

          ORDER BY #arguments.order_by#
        </cfquery>

2 个答案:

答案 0 :(得分:3)

Maxrows一直是我要避免的东西。

我不确定ColdFusion如何处理这个问题,但我记得听到(至少在CF7出现的时候)CF实际上获得了更大的数据集,然后将其拆分为CF服务器级别而不是SQL数据库级别。可以想象,这可能会产生不必要的性能损失,

我不确定您的确切问题是什么(听起来像是一个错误),但我强烈建议您在SQL中替换LIMITOFFSET子句的组合的maxrows属性(CFQUERY)。

好处是,这是标准的SQL,实际上可能比CF maxrows更快,同时也消除了你的问题。

答案 1 :(得分:3)

不确定为什么会这样,但您可能会发现mySQL LIMIT子句作为替代。更多信息:http://dev.mysql.com/doc/refman/5.0/en/select.html