2012-05-26 41 views
0

我試圖創建一個單獨的表格來跟蹤讀取/未讀文章。使用MySQLi我將有兩個表itemsitems_tracking。當頁面呈現時,它將加入表格並檢查用戶是否閱讀帖子。在插入後更新讀取/未讀表格

items 
+-------+------------+----+ 
| id | created_by | .. | 
+-------+------------+----+ 
| item1 | id12  | .. | 
| item2 | id433  | .. | 
+-------+------------+----+ 

items_tracking 
+---------+---------+------+ 
| user_id | item_id | read | 
+---------+---------+------+ 
| id1  | item1 | 0 | 
| id2  | item2 | 0 | 
| id94 | item1 | 1 | 
+---------+---------+------+ 

現在的想法是,只要在items表創建一個新的項目/後,它也將創造在items_tracking錶行的所有用戶,並與read = 0列。問題是,我不知道如何解決這個問題,因爲我在items_tracking中使用的外鍵仍然非常不確定。

關於如何在同時插入兩個表中的任何想法,而第二個表引用第一個?

回答

1

您不需要跟蹤表中的read = 0的記錄。

SELECT ..., t.read FROM items i LEFT JOIN items_tracking t ON (t.item_id = i.id) 

如果在items_tracking沒有相應的記錄這個查詢甚至會工作;在這種情況下,結果中的t.read將是NULL。您只需插入read = 1的記錄,但即使您不需要此標誌,也可以測試t.item_id IS NOT NULL以查看items_tracking中是否有記錄。

+0

嘎,你說得對!我沉浸在這個問題中,我無法想到這樣一個簡單的解決方案。但是,如果您只想列出未讀項目,該怎麼辦?如何僅選擇/顯示'items_tracking'表中不存在對應項的項目?我想我會通過在'items'表上執行一個'SELECT'來解決它,然後對每個項目,我會做另一個'SELECT'來查找'items_tracking'表中是否存在一行,如果不存在,我甚至不會渲染它。正確? – Dwelle

+1

'SELECT ... FROM items i LEFT JOIN items_tracking t ON(t.item_id = i.id)WHERE t.item_id IS NULL' – lanzz

+0

沒錯。再次感謝! – Dwelle

相關問題