DBには配列という概念はない。「一つのセルには一つのデータのみを格納する」というシンプルなルールで作られたテーブルなので、そもそもデータベースの厳密性を大きく損なうことになるため、大前提としてやらない方が良い。ただ、WordPressでは散見される。
WordPressでは、配列をDBに保存する時に以下のようにシリアライズされている。
a:4:{i:0;s:1:"7";i:1;s:2:"11";i:2;s:3:"884";i:3;s:2:"14";}
※上記では、WPのカスタムフィールドに投稿IDのリストを保存している。
分解すると、以下になっている。
- a:配列のlength
- i:インデックス番号
- s:文字数
- “”:value
meta_queryで単純に$post_idでLIKEすると、想定していない投稿がヒットしてしまう。
そのため、これを WordPressの meta_queryで取得するには、シリアル化された文字列を再現すれば良い。
sprintf( 's:%d:"%d"', strlen($var), $var )
【使用例】
'meta_query' => array( array( 'key' => 'case-group', 'value' => sprintf( 's:%d:"%d"', strlen($post->ID), $post->ID ), 'compare' => 'LIKE' ), )