• 解決済 infra

    (@infra)


    ●これに困っています
    顧客管理データベースを作っていて、投稿(postID)内のカスタムフィールドに顧客名や住所などを入力して表示したいです。
    内容の変更履歴を記録して、かつ最新のものを表示するにはどうしたらいいかということに困っています。

    ●こんな感じのものを想定しています。
    wordpress以外のシステム(データベース)の場合しか想定できていないのですが、
    顧客IDに対して、顧客住所が変わることを想定してあらかじめテーブルを作成しておきます。
    住所テーブル(フィールドは以下)を用意して、変更日付で降順ソート&top値を1つ取得させれば可能です。

    住所テーブル
     ID:かぶらないもの@数値型/主キー
     顧客ID:顧客ごとに振られるもの@数値型
     住所:住所(変わるかもしれない)@テキスト型
     変更日付:変更した日付@日付型

    最新の住所を取得するSQL

    SELECT TOP 1 ID, 顧客ID, 住所, 変更日付
    FROM 住所テーブル
    WHERE ((顧客ID)=任意のキー)
    ORDER BY 変更日付 DESC;

    →最新住所が1件だけ表示される!

    ●自分で考えたwordpressで解決方法の案
    案1)カスタムフィールドで特定の(自作)テーブルに書きこませて独自にsql発行するようなやり方?(想像してみただけ。多分危険)

    案2)postIDに紐付くデータを新規postIDとして丸ごとコピーして…→(この方法だと履歴がとれてるわけではないので廃案)

    案3)「住所」と「変更日付」というカスタムフィールドにarrayを作成してうまいこと抽出する?→ちょっと具体案が思いつきませんがこれならできそうな気がしました

    ●というわけで
    wordpressのカスタムフィールドで上記目的を達成することは可能かどうか、そもそもカスタムフィールドでやるものではない(?)とか、こんなプラグインを使えばできるよ!とか、君はwordpressに向いてない出ていけ!みたいなことをご指導ください。

    ●その他、wordpressを選択した理由
    PC・ipad・iPhoneからの閲覧が必要との要件だったため、
    webで管理…ということは!wordpress使えば簡単じゃね?管理画面や表示画面もカスタマイズしやすいし。という安易な考えからです。

    以上まとまりがなくて申し訳ありませんがよろしくお願いいたします。

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • 案2)postIDに紐付くデータを新規postIDとして丸ごとコピーして…→(この方法だと履歴がとれてるわけではないので廃案)

    私だったら、案2で、履歴をとる部分を何とかする、ですね。
    (住所変更はさほど頻繁で無いと仮定すると、この部分は優先度低、iPhoneでの表示を優先度高、とする判断。
    逆に、住所変更時の転送先を調べるため等に使う予定なら、この方針は非常に危険)

    WP のデータベースはそのまま使う
    ID :投稿ID
    顧客ID :ユーザーID
    住所 :本文
    変更日付 :変更日付

    履歴は、指定したユーザーIDの過去投稿を全部とってきて処理する。

    カスタムフィールドの値をシリアライズして投稿の「本文」に保存しておいて
    リビジョン使えば OK な気がします。

    トピック投稿者 infra

    (@infra)

    php-webさん

    住所変更時の転送先を調べるため等に使う予定なら、この方針は非常に危険

    これはどんな場合でしょうか。
    また、今の要件にはない今後の拡張性として(質問文に書いてなくて申し訳ありません。)住所だけではなく会社名が変更になった場合などや、電話番号が変更になった場合に対応するには、汎用性のあるやり方のほうが好ましいです。
    php-webさんのおっしゃるように、レコードの更新頻度は低く表示の優先度を上げるという考え方にはとても同感です。

    トピック投稿者 infra

    (@infra)

    kzさん
    シンプルですね。
    当初、変更があったら記事投稿欄に変更した項目と変更日付を書いて、新しい値でカスタムフィールドを上書きにすれば、そもそもリビジョンを使わなくても(運用ルールの話ですが)それだけで解決かと考えていたのですが、ユーザーが楽な方法は何かと模索していてシステム的に解決する方法を考えていました。

    カスタムフィールドの値をシリアライズして投稿の「本文」に保存

    これはユーザー視点で具体的にどのような操作になるのでしょうか?
    運用の場面を想定すると、カスタムフィールドに管理画面から操作を行うのですが、これはどのように実現したらよいのでしょうか。

    住所変更時の転送先を調べるため等に使う予定なら、この方針は非常に危険

    これはどんな場合でしょうか。

    郵便物の転送だと、新旧両方の情報が必要になると思います。
    その場合には、古いデータが残るような形が必要になるでしょう。
    そうすると、「ユーザーが、(既存の書き換えでなく)新規で書く」「ユーザーが、古いデータを削除しない」ことを(運用でカバーではなく)システムで作る
    ことになって、これはリスキー(WPの仕組みを大きく変更する)だと思います。
    (古い情報がそこまで重要でないなら、運用で対応しても、そこまでのリスクは無いが)

    トピック投稿者 infra

    (@infra)

    php-webさん
    案2の場合、最初に書いた「内容の変更履歴を記録して、かつ最新のものを表示」という要件にマッチさせることが困難となるため、この方針を廃案とした経緯があります。
    おっしゃるとおり、wpの仕組み自体を変更することはWPアップデート時にチェックを掛けなくてはならないし、影響範囲などを考えるといろいろと大変そうですね。

    変更履歴はリビジョンから追うというのがwordpress流なんでしょうかねぇ

    案2+運用でカバー(管理画面をカスタマイズして操作ミスを減らす、操作ミスしたときはデータベースのバックアップを参照する、等)
    では困る(履歴は厳密にとりたい)なら、この案はボツでしょうね。

    履歴の重要度高&wordpress使う、であれば、リビジョン機能を活用が良さそうです。

    トピック投稿者 infra

    (@infra)

    解決済みにしてなかったので 更新します。

8件の返信を表示中 - 1 - 8件目 (全8件中)

トピック「【カスタムフィールド】変更履歴の保存と最新のものを表示させたい」には新たに返信することはできません。