Произошла ошибка базы данных. Номер ошибки: 1055

Изменил базу данных с MySQL на MySQLI и получил ошибку — Произошла ошибка базы данных

Номер ошибки: 1055

Выражение № 23 списка SELECT отсутствует в предложении GROUP BY и содержит неагрегированный столбец ‘zipbizzlatestdb.pia.id’, который функционально не зависит от столбцов в предложении GROUP BY; это несовместимо с sql_mode = only_full_group_by

SELECT *,o.id as id, GROUP_CONCAT(pia.applicantid) as applicants
FROM `pr_opportunity` as o
LEFT OUTER JOIN pr_internal_applicant as pia
ON o.id = pia.positionid
WHERE o.approval_status='Approved'
and DATE(o.deadline) > DATE(NOW())
GROUP BY o.id

Имя файла: /var/www/html/singlecodebase/Feb152017/models/mod_common.php

Номер строки: 6999

Мой файл модели mod_common выглядит так:

function get_opportunity_list()
{
$sql = "SELECT *,o.id as id, GROUP_CONCAT(pia.applicantid) as applicants
FROM `".$this->myTables['opportunity']."` as o
LEFT OUTER JOIN pr_internal_applicant as pia
ON o.id = pia.positionid
WHERE o.approval_status='Approved'
and DATE(o.deadline) > DATE(NOW())
GROUP BY o.id";
$query=$this->db->query($sql);

if($query->num_rows() > 0){
$rows = $query->result();

}
return $rows;
}

Понятия не имею, как решить эту ошибку

3

Решение

это происходит в mysql 5.7 так что проверьте эту ссылку [https://www.sitepoint.com/quick-tip-how-to-permanently-change-sql-mode-in-mysql/] и следуйте инструкциям, это работает нормально для меня.

Или же
открыть файл

vi /etc/mysql/my.cnf

Добавьте эти строки внизу файла

[mysqld]
# ... other stuff will probably be here
sql_mode = "STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

и сохранить
затем перезапустите MySQL

sudo service mysql restart

Примечание не для окна ОС

2

Другие решения

При чтении SQL вы просите вернуть каждый столбец (т.е. *), а также идентификатор во второй раз (o.id уже получен с помощью *), а затем запрашиваете агрегатную функцию GROUP_CONCAT (pia.applicantid). Тем не менее, ваша группа по предложению только агрегирует по (group by) o.id.

SQL не нравится это, потому что он не знает, что делать с другими полями в вашем наборе данных, которые вы запрашиваете для использования *.

Я подозреваю, что вы хотите увидеть все заявки, связанные с o.id в совокупности. Если это так, это ваш запрос, и он будет работать.

SELECT o.id as id, GROUP_CONCAT(pia.applicantid) as applicants
FROM `".$this->myTables['opportunity']."` as o
LEFT OUTER JOIN pr_internal_applicant as pia
ON o.id = pia.positionid
WHERE o.approval_status='Approved'
and DATE(o.deadline) > DATE(NOW())
GROUP BY o.id"

Если вы хотите сгруппировать по другим полям, просто добавьте их конкретно в ваш выбор, а также в свою группу. Все неагрегированные поля должны быть как в select, так и в group by. Это часть Стандарт ANSI и должно быть верно для всех разновидностей SQL. Я полагаю, что MySQL 5.7 и выше — это больше, чем предыдущие версии, но я бы следовал этому, как правило.

Вот некоторые дополнительные чтения по теме. Надеюсь это поможет.
MySQL 5.7 Документация по Группе

0

Это сработало для меня:

открыто HTTP: // локальный / PHPMyAdmin / затем нажмите SQL и выполните этот запрос:

  1. SET sql_mode = '';
  2. SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
0
По вопросам рекламы [email protected]