2015
12/09

meta_queryでNUMERIC/DECIMALを指定するときの注意

以前meta_queryで小数を扱うときの注意について書きました。

meta_queryで小数を含む数値を扱うときの注意

てっきりWordPressのバグかと思ってましたが、meta_queryの指定方法を間違っていたということに気付きました。

ADs

Codexには載っていない

Codexでのmeta_queryの解説では

Class Reference/WP Meta Query « WordPress Codex
type (string) – Custom field type. Possible values are ‘NUMERIC’, ‘BINARY’, ‘CHAR’, ‘DATE’, ‘DATETIME’, ‘DECIMAL’, ‘SIGNED’, ‘TIME’, ‘UNSIGNED’. Default value is ‘CHAR’.

とあります。

typeに「NUMERIC」や「BINARY」という単語を指定すればいいんだな、となりますが、実はNUMERICとDECIMALの場合だけちょっと違います。

ソースを見てみる

WordPress4.4の場合はwp-includes/class-wp-meta-query.php、それ以前のバージョンではwp-includes/meta.phpというファイル内でget_cast_for_type()という関数が定義されています。これを見てみましょう。

NUMERICとDECIMALだけ単なる単語ではないですね。

どう書くべきか

「type」を指定する際に、桁数の指定も含めます。

これで全体で3桁、小数点以下1桁の数値を正しく計算してくれます。

NUMERICでも小数点を扱えますので、桁数指定をちゃんとやればNUMERIC/DECIMALを使い分ける必要はないと思います。
(データベースのバージョンや種類によっては区別する必要があるかもしれないので挙動を確認しながら実装してみてください)

参考

桁数の指定方法については下記が分かりやすかったです。
ありがとうございます。

MySQL :: MySQL 5.6 リファレンスマニュアル :: 11.2.2 固定小数点型 (真数値) – DECIMAL、NUMERIC
MySQLでdecimalを使うときの注意点 | 株式会社LIG

ADs

Post Comments

メールアドレスが公開されることはありません。

Comments

コメントはまだありません。