0

我有两个包含这些列的表(我只显示相关的):

tasks table
+----+------+
| id | todo |
+----+------+
| 1  | 0    |
| 2  | 1    |
| 3  | 1    |
| 4  | 0    |
| 5  | 1    |
+----+------+

entries table
+----+---------+---------+------+
| id | task_id | user_id | done |
+----+---------+---------+------+
| 1  | 3       | 1       | 1    |
| 2  | 5       | 2       | 1    |
| 3  | 5       | 1       | 1    |
| 4  | 2       | 1       | 0    |
+----+---------+---------+------+

我查询这些表并且只保留taskswhere todo = 1,所以我已经在 PHP 对象中有数据。

然后,我有两个用户可以查看的列表:要执行的任务,已归档(已完成),以及要执行的任务。task_id我可以很好地生成第一个列表,如果它们有匹配的where ,我将遍历每个任务和条目user_id == $loggeduser && done == 1,并取消设置不匹配的索引。但是,我找不到使用我的存档列表执行此操作的逻辑,因为我没有要匹配的条目。如何循环我的任务并只为用户保留已完成的任务?在这种情况下,对于用户 1 的存档列表,我只保留任务 ID 3 和 5,而对于用户 2,只保留任务 ID 2。

谢谢。

4

1 回答 1

1

您可以使用纯 SQL 来完成所有这些工作(我想您正在使用一些关系数据库)。

此查询为您提供所有“待办事项和已完成”任务。要获得“待办事项和未完成”任务,只需将“ e.done = 1”更改为“ e.done = 0”。我相信你明白了。

SELECT * FROM tasks t
  INNER JOIN entries e ON t.id = e.task_id
    AND e.user_id = [logged_user_id]
    AND e.done = 1
WHERE
  t.todo = 0
于 2013-10-22T13:03:37.323 回答