ページ: 1
[解決 コメントに対策方法]
またMySQL関連のところで聞けと怒られそうですが、どうにもならんようなのでお尋ねします。MySQLが5.7.6へ更新されて以後、「ONLY_FULL_GROUP_BY」がデフォルト値となったせいらしいのですが、Nucleusを利用しているサイトの過去記事一覧などで、query SELECT itimeがあるためか、SQLモード設定の「ONLY_FULL_GROUP_BY」でエラーになりだしました。sql mode項目の「ONLY_FULL_GROUP_BY」外せば済む話なのですが、レンタルサーバーではmy.cnfとかmysqld.cnfといった、これを司るファイルの編集権限がありません。調べると、例えば
array("SET SESSION sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';")
とかでそのクエリーが出る都度にモードを変更させれば良いらしいのですが、どこに入れたものやら、皆目見当が付きません。アドバイスいただけましたら有り難いのですが…
エラーメッセージ例を、以下に。
mySQL error with query SELECT itime, SUBSTRING(itime,1,4) AS Year, SUBSTRING(itime,6,2) AS Month, SUBSTRING(itime,9,2) as Day FROM nucleus_item WHERE iblog=1 and itime <="2019-09-22 13:23:49" and idraft=0 and icat=9 GROUP BY Year, Month ORDER BY itime DESC: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'xxxxxxx.nucleus_item.itime' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
編集者 tomi (2019-09-25 13:49:05)
--Tomi------------------------------------------
tech@digi-hound.com
DIGIHOUND LLC USA President
---------------------------------------------------
オフライン
解決しました。お騒がせしました。
もし同じ症状でお困りの方がありましたら…ということで、以下に対策。
BLOG.php 614行目
echo TEMPLATE::fill($tplt, $data);
の後に、
sql_query("SET sql_mode=(SELECT REPLACE(@@sql_mode, 'ONLY_FULL_GROUP_BY', ''));");
を追加します。これだけです。
--Tomi------------------------------------------
tech@digi-hound.com
DIGIHOUND LLC USA President
---------------------------------------------------
オフライン
こちら確認が遅くなりました。情報ありがとうございます。
クエリのほうを修正したいと思いますので、もしよければ動作確認をお願いしてよいでしょうか?
できればONLY_FULL_GROUP_BYをオンオフする設定も追加したいと思います。
オフライン
私の環境…米HE.netでよろしければ、テストします。「ONLY_FULL_GROUP_BYをオンオフする設定も追加」は良いですね〜。
--Tomi------------------------------------------
tech@digi-hound.com
DIGIHOUND LLC USA President
---------------------------------------------------
オフライン
ページ: 1