2012-05-26 3 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 테이블에서 생성 될 때마다, 그것은 또한 모든 사용자 및 열 read = 0으로 items_tracking 테이블의 행을 만듭니다이었다. 문제는, 나는 이걸 어떻게 해결 해야할지 모르겠다. 왜냐하면 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_tracking 테이블의 행이 존재 하는지를 알아내는 또 다른'SELECT'을 수행 할 것이고, 그렇지 않다면'items' 테이블에'SELECT'를 수행하여 해결할 것이라고 생각합니다. 나는 그것을 렌더링하지 않을 것이다. 옳은? – Dwelle

+1

'SELECT ... FROM items 내가 LEFT JOIN items_tracking t ON (t.item_id = i.id) 어디서 t.item_id가 NULL입니까? – lanzz

+0

입니다. 다시 한 번 감사드립니다! – Dwelle

관련 문제