Изменил базу данных с 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;
}
Понятия не имею, как решить эту ошибку
это происходит в 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
Примечание не для окна ОС
При чтении 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 Документация по Группе
Это сработало для меня:
открыто HTTP: // локальный / PHPMyAdmin / затем нажмите SQL и выполните этот запрос:
SET sql_mode = '';
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));