2017-07-27 1 views
-3

私は頭を悩ませていましたが、まだ解決策を考えることはできません。MySQLでチェックリストの結果を保存する

私はチェックリストWebアプリケーション用のデータベースを作成しています。基本的にチェックリストが作成され、「完了」または「完了していない」のいずれかのオプションで完了し、完了していない項目が示されたレポートが生成されます。

現在、多くのチェックリスト項目で構成される「チェックリスト」の表があります。チェックリストの結果(完了しているかどうかにかかわらず)は、「レポート」という表に格納されますが、ここではヘルプが必要です。これは、完全ではなく、完全ではないとマークされているかどうかを格納する必要があり、各チェックリストの長さが異なるためです。

「Checklist Item」のユニークなIDを「レポート」に格納できる文字列に変換しないでください。各IDはコンマで区切ります。それぞれのIDは、PHPの 'explode'関数を使用して抽出することができます。これはおそらく動作します。しかし、私はこれが最もエレガントな解決策だとは思わないので、より良い解決策への助けがあれば幸いです。

EDIT(重要):チェックリストは毎日完了し、レポートは長期保存されることを意図しています。したがって、各項目に「レポート」フィールドを追加しても機能しません。

+0

チェックリスト項目ごとに 'レポート 'に別々の行がないのはなぜですか?なぜいくつかのリストは他のリストよりも長いことが重要ですか? – BeetleJuice

+0

https://en.wikipedia.org/wiki/Database_normalization – deceze

+0

なぜ両方を保存する必要があるのか​​分かりません。完成したタスクだけを保存することができますか? – Strawberry

答えて

2

あなたの問題は、異なるセットアップdamands:チェックリストのための

  • テーブル(ID、チェックリストの名前を、...)チェックリスト - 項目のための
  • テーブル(checlistId、品目ID、タイトル、... )

チェックリストごとまたはチェックリストごとに新しいテーブルを追加できます。しかし、私にとっては、上記の表のそれぞれに単純なフィールド(TRUEまたはFALSE)で十分です。

EDIT

のコメントを読んだ後、テーブルレポートには、以下のフィールド含まれている必要があります - のitemId - userIdを - (アイテムが複数のチェックリストにリンクすることができ、オプションのchecklistId) - (完成は常に真である)

問題が残っています。完了後にチェックリストに追加されたアイテムは何ですか? より良い解決策は、進行中のチェックリスト(起動したユーザー)と現在の完了したアイテムへのリンクのテーブルを追加することです。

+0

チェックリストが何度も(たとえば1日に1回)完了しているため、これは機能しません。あなたが提案していることをするには、毎回アイテムを再作成する必要があります。 しかし、2つのテーブル(チェックリスト、チェックリスト項目)はすでに私のDBのケースです。 – PL200

+0

次に、フィールドchecklistItemId、completed、dateを含むテーブルを追加します。 – Bee157

+0

私はいくつかの情報が不足していると思います。チェックリストの作成、アイテムの追加、アイテムの削除、チェックリストの開始、アイテムの完了などのさまざまなユースケースは何ですか?この構成では、開始された(進行中の)チェックリストをDBのどこかに保存する必要があります) – Bee157

0

弊社のソフトウェア(PHPフレームワーク構築済み)でチェックリストを実装しました。これは単にオブジェクトの文字列ベースの属性checklistです。そこで、チェックボックス要素を持つ配列を表すJSON形式の文字列を保存します。各要素自体は、checked(ブール値1または0)とlabel(実際のチェックボックスラベルテキスト)を含む配列です。それは私のために働くとおそらくあなたを助ける:) jsonencode()/jsondecode()を見てください。

並べ替えるには別の要素sortを追加するだけです。

関連する問題