2

データベースを MySQL から MySQLI に変更し、エラーが発生しました - A Database Error Occurred

エラー番号: 1055

SELECT リストの式 #23 は GROUP BY 句になく、GROUP BY 句の列に機能的に依存していない非集計列 'zipbizzlatestdb.pia.id' が含まれています。これは 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;
}

このエラーを解決する方法がわからない

4

3 に答える 3

0

SQL を読み取る際に、すべての列 (つまり *) と id をもう一度返すように求めています (o.id は既に * によって取得されています)。次に、GROUP_CONCAT(pia.applicantid )。ただし、group by 句は (group by) o.id による集計のみを要求します。

SQL は、* を使用してクエリを実行しているデータセット内の他のフィールドをどう処理すればよいかわからないため、これを好みません。

o.id に関連するすべての applicationid を集約的に表示したいのではないでしょうか。もしそうなら、これはあなたのクエリであり、うまくいきます。

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 に具体的に追加するだけです。非集計フィールドはすべて、select と group by の両方にある必要があります。これはANSI 標準の一部であり、すべての SQL フレーバーに当てはまります。私は mysql 5.7 以降が以前のバージョンよりもこれに基づいていると信じていますが、原則としてこれに従います。

このトピックに関する補足資料を次に示します。お役に立てれば。 Group byに関するMySQL 5.7ドキュメント

于 2017-09-12T11:42:46.833 に答える