0

これらの列を持つ2つのテーブルがあります(関連性の高いもののみを表示しています):

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 オブジェクトにデータがあります。

次に、ユーザーが表示できる2つのリストがあります。実行するタスクとアーカイブ(完了)するタスク、および実行するタスクです。task_id最初のリストを問題なく生成できます。一致するwhereがある場合は各タスクとエントリをループし、一致user_id == $loggeduser && done == 1しないもののインデックスを設定解除します。ただし、一致するエントリがないため、アーカイブ リストでこれを行うロジックが見つかりません。タスクをループして、ユーザーのために完了したタスクのみを保持するにはどうすればよいですか? この場合、ユーザー 1 のアーカイブ リストでは、タスク ID 3 と 5 のみを保持し、ユーザー 2 ではタスク ID 2 のみを保持することを例外としています。

ありがとう。

4

1 に答える 1

1

これらはすべてプレーン SQL を使用して実行できます (リレーショナル データベースを使用していると思います)。

このクエリは、すべてのタスク「todo & done」を提供します。タスク "todo & not done" を取得するには、" 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 に答える