最終的にやりたいこと  
・Webサービスへのログイン有無で、長い文章の一部分だけ表示内容を変えたい。  
・未ログイン状態では、氏名を表示しないようにしたい

未ログイン状態で表示したい内容例  
・町は2日午後2時20分、町内全域に「緊急安全確保」を出しました。  
・町長は3日午後2時20分、町内全域に「緊急安全確保」を出しました。  
・4日午後2時20分、市長は市内全域に「緊急安全確保」を出しました。

ログイン状態で表示したい内容例  
・町は2日午後2時20分、町内全域に「緊急安全確保」を出しました。  
・佐藤町長は3日午後2時20分、町内全域に「緊急安全確保」を出しました。  
・4日午後2時20分、鈴木市長は市内全域に「緊急安全確保」を出しました。

環境  
・MySQL  
・PHP

知りたいこと  
・最適なMySQLカラム構成。  
・各案のメリットデメリットについて、どこに着目すればよいか知りたい

案A.「未ログイン状態で表示するテキスト」と「ログイン状態で表示するテキスト」をそれぞれ異なるカラムへ全文格納。  
・str_guest ／ 町長は3日午後2時20分、町内全域に「緊急安全確保」を出しました。  
・str_member ／ 佐藤町長は3日午後2時20分、町内全域に「緊急安全確保」を出しました。

案B.「ログイン状態で表示するテキスト」と「未ログイン状態で削除するテキスト」を異なるカラムへ格納。  
・str ／佐藤町長は3日午後2時20分、町内全域に「緊急安全確保」を出しました。  
・str_del ／ 佐藤

案C.上記以外
CC BY-SA 4.0
2023-06-02T09:08:37.063
95074
2023-06-02T11:54:58.020
7886
question
php mysql
Webサービスへのログイン有無で、長い文章の一部分だけ表示内容を変えたい時のDBカラム構成について
PHP は普段書かないですし、カラムの構成もひとまず置いておきますが…

* * *

ほぼ同じ文章を複数保持するのは無駄な気がするので、必要な部分のみを書き換える方法を取ります。

> 長い文章の一部分だけ表示内容を変えたい。

後から「変えたい」部分 = 置換をかけやすいように適当な文字列をあらかじめ埋め込んでおきます。  
(以下の例では `__MAYOR__` の部分。意図しない置換が発生しないような文字列であれば何でもいい)  
置換したい箇所が少ないなら、単純な `printf` 等でも十分かもしれません。

> 未ログイン状態では、氏名を表示しないようにしたい

ログイン状態に応じて変数の値を調整します。  
以下の例では `$guest` をフラグとして値が定義されているかどうかで切り替えます。

```

    $name  = '鈴木';
    $mayor = '市長';
    
    if (! $guest) {
        $mayor = $name . $mayor;
    }
    
    $str = <<<BODY
    __MAYOR__は3日午後2時20分、町内全域に「緊急安全確保」を出しました。
    BODY;
    
    echo preg_replace('__MAYOR__',$mayor,$str);
    
```
CC BY-SA 4.0
2023-06-02T11:54:58.020
95077
2023-06-02T11:54:58.020
3060
95074
answer