mysql查询在不同的服务器上给出不同的结果

标签 mysql yii centos5

我有以下查询,它在我的测试箱上运行良好,但在我的生产箱上不起作用。有什么问题吗?

SELECT 
    *,
    round(priceperkm * IFNULL(KMPlanned, projects.KM),
            4) AS NEWVALUE,
    round(PRICE * IFNULL(KMPlanned, projects.KM),
            2) AS TotalPriceForItem,
    SUM(((abs(FSP - LSP) + 1) * SI) / 1000) AS KM_Completed,
    round(SUM(((abs(FSP - LSP) + 1) * SI) / 1000) * PRICE,
            2) AS TotalPrice,
    round((SUM(((abs(FSP - LSP) + 1) * SI) / 1000) * PRICE) / (PRICE * IFNULL(KMPlanned, projects.KM)) * 100,
            2) AS TotalPercent
FROM
    hdb.projects
        join
    biditems ON projects.id = biditems.project_id
        join
    lookupprocess ON biditems.ITEMID = lookupprocess.biditems_id
        left join
    jobsprocesscomplete ON lookupprocess.ID = lookupprocess_id
        left join
    detailsseismic ON jobsprocesscomplete.JOBNO = detailsseismic.JOBNO
where
    projects.PROJID = 1402013
        and lookupprocess.ID = 13138    

错误:

2014/02/24 18:37:06 [error] [system.db.CDbCommand] CDbCommand::() failed: SQLSTATE[42000]: Syntax error or access violation: 1140 Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause. The SQL statement executed was: 


                .
2014/02/24 18:37:06 [error] [exception.CDbException] exception 'CDbException' with message 'CDbCommand failed to execute the SQL statement: SQLSTATE[42000]: Syntax error or access violation: 1140 Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause' in /data/intranet/html/yii-1.1.14/framework/db/CDbCommand.php:543
Stack trace:
#0 /data/intranet/html/yii-1.1.14/framework/db/CDbCommand.php(377): CDbCommand->queryInternal('', 0, Array)
#1 /data/intranet/html/paradox/protected/controllers/GlobalController.php(260): CDbCommand->query()
#2 /data/intranet/html/paradox/protected/controllers/ProjectsController.php(648): GlobalController->lookupprocesstotal('1402013', Array)
#3 [internal function]: ProjectsController->actionUpdate('12768')
#4 /data/intranet/html/yii-1.1.14/framework/web/actions/CAction.php(108): ReflectionMethod->invokeArgs(Object(ProjectsController), Array)
#5 /data/intranet/html/yii-1.1.14/framework/web/actions/CInlineAction.php(47): CAction->runWithParamsInternal(Object(ProjectsController), Object(ReflectionMethod), Array)
#6 /data/intranet/html/yii-1.1.14/framework/web/CController.php(308): CInlineAction->runWithParams(Array)
#7 /data/intranet/html/yii-1.1.14/framework/web/CController.php(286): CController->runAction(Object(CInlineAction))
#8 /data/intranet/html/yii-1.1.14/framework/web/CController.php(265): CController->runActionWithFilters(Object(CInlineAction), Array)
#9 /data/intranet/html/yii-1.1.14/framework/web/CWebApplication.php(282): CController->run('update')
#10 /data/intranet/html/yii-1.1.14/framework/web/CWebApplication.php(141): CWebApplication->runController('projects/update')
#11 /data/intranet/html/yii-1.1.14/framework/base/CApplication.php(180): CWebApplication->processRequest()
#12 /data/intranet/html/paradox/index.php(31): CApplication->run()
#13 {main}
REQUEST_URI=/sidb/index.php?r=projects/update&id=12768
HTTP_REFERER=http://intranet/sidb/index.php?r=projects/admin

更新 下面两个服务器给出相同的结果 选择@@GLOBAL.sql_mode; +--------------------+ | @@GLOBAL.sql_mode | +--------------------+ | | +--------------------+ 一组 1 行(0.00 秒)

mysql> SELECT @@SESSION.sql_mode;
+--------------------+
| @@SESSION.sql_mode |
+--------------------+
|                    | 
+--------------------+
1 row in set (0.00 sec)

mysql> show variables like 'sql_mode'
    -> ;
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| sql_mode      |       | 
+---------------+-------+

如果我在查询末尾添加group bylookupprocess.ID会发生什么。它会返回相同的结果吗?

最佳答案

您的 select 子句同时具有列和聚合函数 (sum())。这会将查询变成只返回一行的聚合查询,这可能是也可能不是您想要的。 (我怀疑您确实想要group by某物。)

无论如何,这都使用 MySQL 扩展。该扩展由系统变量 ONLY_FULL_GROUP_BY 控制。启用此功能后,将应用 ANSI 规则。了解它 here !.

您所看到的行为表明,在生产服务器上启用了 ONLY_FULL_GROUP_BY,但在开发服务器上未启用。您应该在两者中启用它或禁用它。

关于mysql查询在不同的服务器上给出不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21996209/

相关文章:

php - 保留数据库标志 1 直到项目到期日期介于 CURDATE() + INTERVAL 7 DAY 和 CURDATE() + INTERVAL 30 DAY 之间

mysql - sql 查询 : no payments in last 90 days

mysql - 多个表导致单个查询

javascript - Yii - js 函数不工作

mysql - 删除 MySQL 表是否也会自动删除该表的索引?

php - 在Yii中捕获PHP警告

php - yii 不同级别用户的不同界面布局

php - 在 CentOS5 上禁用不推荐使用的密码后,如何使用 PHP 执行 SFTP 操作?

jakarta-ee - 在 Tomcat 6 中添加 java_opts 参数

linux - 如何在 BASH 中捕获 href 链接