質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

3回答

2447閲覧

掲示板に論理削除機能をつける方法がわかりません。

mocha1325

総合スコア20

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2019/07/13 09:38

現在、掲示板を作成しており、
(phpとMySQLを使用したもの)
投稿一覧から削除フォームが押されると
物理削除ではなく論理削除が実行されるような
システムを作ろうとしています。

色々調べている中で
"あらかじめテーブルに論理削除用のフラグ(例:deleteflg)を用意しておく必要がある"
ということや
"DELETEではなくUPDATEを使い管理する"
というようなザックリしたことは理解できたのですが
詳細がわかりやすく乗っているサイトが見当たらなく
実際にどのようにコードを書いたりしたらいいのかわからないため、質問させてください!

現在、投稿一覧はmessagesテーブルにて管理しているのですが、
そこに(例:deleteflg)などのカラムを追加するということでしょうか?

「フラグとは」で検索してみても理解できるものがなかったので
途方に暮れています。。

わかるかたアドバイスお願い致しますm(_ _)m

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

フラグの説明
例えば「死亡フラグが立った」という言葉があります。
あれは死亡フラグがオンになったということです。
多分あれはアドベンチャーゲーム、ノベルゲームから来た言葉だと思います。

例えばあるアドベンチャーゲームを想像してみましょう。
はじめ主人公の死亡フラグは0になっています。(死亡フラグ=0;)

主人公が戦争に行くことになる場面で次の選択肢が主人公に与えられます。

A.この戦いが終わったら結婚しよう
B.ばいばーい。またね!

この時システムの裏では
if(Aを選択){
死亡フラグ=1;
}

という処理がされます。

その後戦争中も次の選択肢が与えられます。

A.俺の命はもう長くない、そんな予感がするんだ。
B.意外と戦争っていっても大したことないな。

この時システムの裏では
if(Aを選択){
死亡フラグ=1;
}
という処理がされます。

でなんだかんだこういう選択肢があった後に

if(死亡フラグ==1){
主人公が死ぬイベントへ
}
else{
主人公が生存して帰ってくるイベントへ
}

という分岐がされて、それまでに死亡フラグを立てる(1にする)ような選択肢を一度でも選んでいたら主人公は死んでしまいます。

これが死亡フラグです。

このようにフラグは、"そのフラグが立っている(1になっている)か立っていない(0のまま)かによって処理を変える"という風に使います。(なぜフラグが"立つ"というかといえば、フラグは'旗'だからです。)

わかりやすいようでわかりにくい説明だったかもしれません。。。。

ともかくこの掲示板での処理の場合、
・削除フォームを押すとその投稿の削除フラグが立つ。
・削除フラグが立っていればその投稿を表示しない。
というような処理を行うことで、mysqlの中でデータを削除しなくても、データがなくなったかのように表示させることができます。

これが論理削除です。

mysqlでの実装としては
・defaultで0なdeleteflgをカラムとして用意
・削除フォームが押されたらdeleteflgを1に
・そのテーブルが参照されるときはdeleteflgが1のものを除外して参照する。(select * from table where deleteflg=0 みたいに)

とすれば良いと思います。

投稿2019/07/13 18:50

編集2019/07/13 19:00
aoies

総合スコア331

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mocha1325

2019/07/21 18:43

初心者でもわかりやすいような例えを交えて優しく教えてくださり、ありがとうございました! おかげさまで理解度も上が理、もやもやがスッキリしました!!
guest

0

そこに(例:deleteflg)などのカラムを追加するということでしょうか?

はい。その通りです。
注意点としてはデータを取得する際にdeleteflgが真ではない(または偽である)という条件を追加して取得する必要があります。

「フラグとは」で検索してみても理解できるものがなかったので

簡単に言うと
on / off
です。
電灯のスイッチと思っても良いです。
onにすると電灯が明るくなり、offにすると暗くなる そういう感じです。

それをプログラミングの世界では true / false という「真偽値」で持ちます。
データベースの型で言うと「Boolean」という型になりますが、
プログラミングで扱うのが難しければ「0」「1」でも良いです。

論理削除の場合、登録時は削除フラグを偽(0/1の場合は0)で登録し、
削除処理が行われるときに真(0/1の場合は1)で更新します。

データ取得時に「削除フラグが真ではない(0/1の場合は1ではない)」を条件に入れることで
論理削除されたデータ以外を取得することが出来ます。

投稿2019/07/13 09:56

m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

論理削除とは 実際にはデータを削除せず、削除されたというフラグを立て、ユーザーには削除されたように見せること。 復元や参照が可能。 物理削除とは データベースから削除すること。 復元したり参照は出来ない。

そこに(例:deleteflg)などのカラムを追加するということでしょうか?

これはあっています

例えばなのですが、 01 などの数字をカラムに入れるなどして
データをupdete(更新) して、 delete(削除) はしないということです。

論理削除はデータ検索などの際に、条件が増える(退会していないか)ので
慎重に実装する必要があります。

投稿2019/07/13 09:49

編集2019/07/13 09:51
mochizuki-pg

総合スコア192

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問