0

DB テーブル構造について質問があります。自分が正しい道を進んでいるのか、それとも良い代替手段を逃したのかを知りたい. これがケースです:

私の質問は構造についてのみなので、読みやすくするために、すべての内容を貼り付けていません。

2 つのテーブル:

1: id (AI)、タスク
2: id、名前、タスク

表 1 は、管理パネルで変更できる動的チェックボックスを示しているため、内容は次のようになります。

1 タスク 1
2タスク 2
5 タスク 5

(管理者がこれらのレコードを削除したため、3 と 4 が欠落しています)。

表 2 は、表 1 のタスクを実行する必要がある人です。目標は、チェックされていないタスクが表示されることです。

したがって、表 2 の内容は次のようになります。

1 名前 1 1,5
2 名前 2 1,2
3 名前 3 1,2,5

表 2 の数字は、表 1 のチェックボックスを表しています。したがって、クエリを使用して、表 2 の数字を表 1 の ID と比較し、欠落している ID を「todo」として表示できます。

私の意見では、これは非常にやり過ぎに見えます。比較して todo として保存できる動的オプションを作成する簡単な方法があるはずです。

提案は大歓迎です!

4

1 に答える 1

0

多対多の関係には基本構造を使用することをお勧めします。

tasks                users            user_tasks
+----+-----------+   +----+-------+   +---------+---------+
| id | name      |   | id | name  |   | user_id | task_id |
+----+-----------+   +----+-------+   +---------+---------+
|  1 | Buy milk  |   |  1 | John  |   |       1 |       2 |
|  2 | Get drunk |   |  2 | Tim   |   |       3 |       2 |
|  3 | Have fun  |   |  3 | Steve |   |       2 |       4 |
|  4 | Go home   |   +----+-------+   |       3 |       4 |
+----+-----------+                    +---------+---------+

また、次のクエリを使用して、割り当てられていないタスクを取得できます。

SELECT
    tasks.*
FROM
    tasks
LEFT JOIN
    user_tasks
    ON (tasks.id = user_tasks.task_id)
WHERE
    user_tasks.user_id IS NULL

タスクが割り当てられていないユーザーを取得することもできます。

SELECT
    users.*
FROM
    users
LEFT JOIN
    user_tasks
    ON (users.id = user_tasks.user_id)
WHERE
    user_tasks.user_id IS NULL 

これがあなたを助けることを願っています。

于 2013-10-02T09:15:48.797 に答える