web-dev-qa-db-ja.com

30以上のメタ値を扱う

100以上の投稿があるとデータベースに負担がかかる可能性があると思われる30以上のメタキーを持つ「リスティング」投稿タイプがあります。通常、私がしていることは、各メタ値を1つずつ保存することです。

if(isset($_POST['_item_stock']) && !empty($_POST['_item_stock']))
    update_post_meta($post_id, '_item_stock', sanitize_text_field($_POST['_item_stock']));
else
    delete_post_meta($post_id, '_item_stock');

検証をもっと細かく制御する必要があるのであれば、それができるからです。それは整理されていて、コードを見ていて素敵です。 欠点は、時間がかかり、各メタをデータベースに個別に保存することです。

私の他の選択肢はすべての私のメタを配列に標準化し、それを直列化することです。 このメソッドの欠点は、シリアル化されたデータに対してメタクエリを実行することができないため、検索のフィルタリングやポストオーダーはウィンドウの外に出ます。

最後の選択肢は、半分ずつ実行して、クエリに必要のないもの、その他すべてを個別に保存することをシリアル化することです。多少のオーバーヘッドを節約できるかもしれませんが、コード内で乱雑に見えないようにしたり、いかなる種類の切断もしたくないと思います。

私の質問は - あなたは通常どのように多くのメタキーを持つ投稿を扱うのですか?データベースのオーバーヘッドは、各メタキーを個別に保存するときに想像するほど悪くありませんか。どの方法が最善だと思いますか、またその理由は何ですか。

5
Howdy_McGee

あなたは XY問題 に直面しています。メタ値をそれぞれ単一行として保存する唯一の理由は、検索可能にする必要がある場合です。特定のサニタイズ規則が必要な場合は、 filter_var_array() を使用するか値をサニタイズしてから配列を作成し、最後に値を保存します。

包括的なfilter_var_array()の例をここに挙げてください

5
kaiser