2013-10-22 41 views
0

我有這些列兩個表(我只顯示revelant的):PHP取消設置索引如果沒有匹配

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 | 
+----+---------+---------+------+ 

我查詢這些表只保留tasks其中todo = 1,所以我已經有數據在一個PHP對象中。

然後,我有兩個用戶可以查看的列表:要執行的任務,存檔(完成)的任務以及要執行的任務。我可以生成第一個列表,我正在循環執行每個任務和條目,如果他們有匹配的task_id其中user_id == $loggeduser && done == 1,並且取消設置那些不匹配的索引。但是,我無法找到一個邏輯來對我的存檔列表執行此操作,因爲我沒有要匹配的條目。我如何循環執行我的任務,並且只保留完成的任務,對於用戶?在這種情況下,對於用戶1的歸檔列表,我只保留任務ID 3和5,而對於用戶2,只保留任務ID 2.

謝謝。

+0

發佈一些代碼... – DontVoteMeDown

回答

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 
+0

我的第一種方法是使用一個連接,而我無法得到它的工作,謝謝你,我會再試一次:)有點新加入帶。 – veksen