質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

4回答

2174閲覧

MySQL4.0 → 5.7の影響? DATE_FORMATの動作がおかしくなりました。

chapp

総合スコア233

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2018/12/17 18:02

お世話になります。phpでMySQLを動かしているサイトがあり、この度レンタルサーバーを引っ越すことになりました。

MySQLのバージョンが4.0から5.7となったせいか、以下の部分が動かなくなりました。

SELECT * FROM event WHERE event_date >= DATE_FORMAT(NOW(), '%Y-%m-01') GROUP BY DATE_FORMAT(event_date, '%Y-%m')

現状では、

SELECT * FROM event WHERE event_date >= DATE_FORMAT(NOW(), '%Y-%m-01')

と、Group byを省くとデータを抽出できるまでは確認しています。

引っ越す前は問題なく稼働しており、バージョンが変わったことが原因か?と調べているのですが、特に影響があるような掲載は見当たらず、どこが影響しているのか?またその対策はどうしたら良いのか?ご指導いただければと質問した次第です。

また別の箇所ではありますが、同じファイル内に記載のある、

WHERE DATE_FORMAT(event.event_date, '%m') = '$month'

の部分が影響してか、データを取得出来ません。
恐れ入りますが、アドバイスのほど頂戴出来れば幸いです。

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

MySQLのバージョンが4.0から5.7となったせいか、以下の部分が動かなくなりました。

その時のエラーメッセージも質問に追加しては?

MySQLに限らず、バージョンアップで文法のチェックがシビアになることは良くあることです。
event_dateはDATE型でしょうか?SQLで使っているテーブルのCREATE TABLE 程度は載せた方が適切なコメントが付き易いです。

投稿2018/12/17 21:31

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

chapp

2018/12/19 06:33

Orlofskyさん ご親切な投稿、ありがとうございます。 仰る通り、エラーやテーブル構成など記載すべきことですね。次回から気をつけます。 今回、saziさんのアドバイスで解決出来ました。 バージョンの違いによリコとなる動作は認識していましたが、あまり経験がなく困っている所でした。 ご親切なコメント、感謝いたします。 ありがとうございました。
guest

0

12.20.3 MySQL Handling of GROUP BY

MySQL 5.7.5 and up implements detection of functional dependence. If the ONLY_FULL_GROUP_BY SQL mode is enabled (which it is by default), MySQL rejects queries for which the select list, HAVING condition, or ORDER BY list refer to nonaggregated columns that are neither named in the GROUP BY clause nor are functionally dependent on them. (Before 5.7.5, MySQL does not detect functional dependency and ONLY_FULL_GROUP_BY is not enabled by default. For a description of pre-5.7.5 behavior, see the MySQL 5.6 Reference Manual.)
If ONLY_FULL_GROUP_BY is disabled, a MySQL extension to the standard SQL use of GROUP BY permits the select list, HAVING condition, or ORDER BY list to refer to nonaggregated columns even if the columns are not functionally dependent on GROUP BY columns. This causes MySQL to accept the preceding query. In this case, the server is free to choose any value from each group, so unless they are the same, the values chosen are nondeterministic, which is probably not what you want.

投稿2018/12/17 19:43

編集2018/12/17 20:06
hichon

総合スコア5737

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

chapp

2018/12/19 06:33

hichonさん ご親切なアドバイスをありがとうございました。 バージョンの違いで異なる動作を認識していましたが、あまり経験がなく困っていたところでした。 ありがとうございます。
guest

0

ベストアンサー

MySQL5.7はONLY_FULL_GROUP_BYがデフォルトでONですので、そのためのエラーではないでしょうか。
他にもありそうですので、確認してみて下さい。
MySQL5.7のデフォルトのSQLモードを確認してみる

投稿2018/12/18 01:00

sazi

総合スコア25138

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

chapp

2018/12/19 06:43

saziさん ご親切な対応、ありがとうございます。 他の方へのお礼でも述べていますが、バージョン違いによる不具合を見つけ出すことが出来ずにいたので、この度のアドバイス、とても助かりました。 今回の不具合、参考サイトにある1行を追加しただけで解決することが出来ました。 ありがとうございました。
guest

0

MySQL4.0はシリーズの中でもダントツでだめな子といわれていたバージョンなので
あまり過度な期待はせずただしいSQL文法で書き換えようにしてください

SQL

1SELECT DATE_FORMAT(event_date, '%Y-%m') as dt,count(*) as cnt FROM event 2WHERE event_date >= DATE_FORMAT(NOW(), '%Y-%m-01') 3GROUP BY dt

GROUPY BYは集計時につかうものなのでは指定しないで下さい
さらに言えば
はテストなど特別な場合以外つかわず
必要なカラムはすべて列記して下さい
(*を使うことによりデバッグの精度が極端におちます)

投稿2018/12/18 00:22

yambejp

総合スコア114585

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

chapp

2018/12/19 06:41

yambejpさん ご親切なアドバイスをありがとうございます。 ソースまで張っていただき感謝いたします。 バージョンの違いによる異なる動作は認識していましたが、その情報にたどり着くことが出来ずにいたため、ご親切な対応に感謝しています。 ソースまでご提示いただき、ありがとうございます。勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問