0

我有一个查询,它在本地 wamp 服务器上运行良好,但上传到 mye 网络服务器给我一个错误。看过类似的解决方案,但无法理解它以适应我的查询。

错误:

Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'intranett3.skift.start' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

我有 2 个表,一个带有分配的主表和一个计数转移到该分配的表

ex table vakter (assignement 在我的表中被命名为 oppdrag 并且 start/stop 被命名为 start/slutt)

vakt_id 赋值 ...
1 任务 1 ...

前表skift

skift_id vakt_id 开始 停止 ...
1 1 2021-06-21 17:00:00 2021-06-21 18:00 ...
2 1 2021-06-21 18:00:00 2021-06-21 21:00 ...

我想展示

赋值 开始 停止
任务 1 2021-06-21 17:00:00 2021-06-21 21:00

其中开始日期是 skift 中的最早时间,其中 vakt_id 为 1,停止日期是同一行中的最晚时间。

桌子

CREATE TABLE IF NOT EXISTS `vakter` (
  `vakt_id` int(5) NOT NULL AUTO_INCREMENT,
  `status` enum('Aktiv','Utsatt','Avlyst','Ubekreftet') NOT NULL,
  `lag_id` int(5) NOT NULL,
  `type_id` int(5) NOT NULL,
  `sted_id` int(5) NOT NULL,
  `start` datetime DEFAULT NULL,  #this is not populated
  `slutt` datetime DEFAULT NULL,  #this is not populated
  `oppdrag` varchar(255) NOT NULL,
  `info` text NOT NULL,
  `kunde_id` int(5) NOT NULL,
  `kunderef` varchar(255) NOT NULL,
  `rapportok` tinyint(1) NOT NULL,
  `created_by` int(5) NOT NULL,
  `created` datetime NOT NULL,
  PRIMARY KEY (`vakt_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1568 DEFAULT CHARSET=latin1;

和表 2

CREATE TABLE IF NOT EXISTS `skift` (
  `skift_id` int(11) NOT NULL AUTO_INCREMENT,
  `vakt_id` int(5) NOT NULL,
  `start` datetime NOT NULL,
  `slutt` datetime NOT NULL,
  `mannskap` int(5) NOT NULL,
  `hospitant` int(5) NOT NULL,
  `bil` varchar(255) NOT NULL,
  `ressursgruppe` int(5) NOT NULL,
  PRIMARY KEY (`skift_id`)
) ENGINE=InnoDB AUTO_INCREMENT=2223 DEFAULT CHARSET=latin1;

我的查询

public function paginatevakter(int $nb_page, int $lagID) {
        return $this->select('vakter.oppdrag, vakter.vakt_id')
        ->selectMin('skift.start', 'sstart')
        ->selectMax('skift.slutt', 'sslutt')
        ->join('skift', 'skift.vakt_id = vakter.vakt_id', 'LEFT')
        ->where('skift.start > now()')
        ->where('lag_id', $lagID)
        ->selectCount('skift.vakt_id', 'ant_skift')
        ->orderBy('skift.start')
        ->groupBy('vakter.vakt_id')
        ->paginate($nb_page, 'show');
    }

在 group by 中尝试了不同的值。

PS 不能在表一中使用 start /stop(slutt),因为它是从旧数据库中导入的,没有使用这些数据库...

4

1 回答 1

0

当它们具有相同时,您希望将多行打包在一起vakt_id

->groupBy('vakter.vakt_id')

start...并显示一个计算值(所有这些行中的最小值):

->selectMin('skift.start', 'sstart')

但随后您要求按原始值对结果进行排序:

->orderBy('skift.start')

从逻辑的角度来看,这没有任何意义。您的sql_mode=only_full_group_by其中一台服务器可以防止 MySQL 忽略这一点并产生潜在的错误结果。

于 2021-06-16T07:03:54.327 回答