2010-06-16 5 views
0

나는 사용자 (발신자)가 수신자 수 (= 수신자 수)에 메모를 쓸 수있는 시스템을 가지고있다. 메시지의 텍스트는 DB에 저장되고 발신자와 모든 수신자에게 표시되며 시스템에 로그인됩니다. 발신자는 언제든지 수신자를 더 추가 할 수 있습니다. 리시버 중 어떤 것보다 메시지를 편집 할 수 있으며 심지어 DB에서 제거 할 수 있습니다.메일 링 시스템 DB 구조, 도움이 필요함

사용자 (아이디, 사용자 이름, 암호)
메시지 (messageID 설명, 텍스트)
목록 (ID, 센더, receiverID, messageID 설명)

:이 시스템에 대해 내가 곧 3 개 테이블을 생성 receiver_1_ID - - message_1_ID
sender_x_ID - 테이블 "리스트"의 각 행

sender_x_ID 같이, 송신기 - 수신기 쌍에 대응하는 재 ceiver_2_ID는 - receiver_3_ID - -
sender_x_ID message_1_ID message_1_ID

지금 문제가 :
사용자가 "메시지"테이블에서 메시지를 삭제하면 1. 어떻게 자동으로 테이블 "목록"에서 모든 행을 삭제를하는 삭제 된 메시지에 해당합니다. 외래 키가 필요합니까?

더 중요한 :
2. 보낸 사람이 할 수있는 경우는 자신의 message1 (사용자 이름 1, 사용자 이름 2와 USERNAME3) 및 특정 순간에 3 개 수신기 username4 및 username5을 추가하기로 결정 말을 동시에 수신기의 목록에서 사용자 이름 1을 제외 . receiver_4_ID - - message_1_ID
sender_x_ID - receiver_5_ID - message_1_ID

PHP 코드는 수신기 (사용자 이름 2, USERNAME3, username4, username5) 즉, 테이블에 "목록"

sender_x_ID를 삽입 의미의 새 목록을 얻을 것이다 receiver_1_ID - - message_1_ID또한 테이블에서 "리스트"(더 목록 또는 수신기가 아닌) 사용자 1에 대응하는 행

sender_x_ID 삭제

SQL 쿼리를 PHP에서 보내어 쉽고 지능적으로 만들 수 있습니까? 도와주세요! SQL 쿼리의 예는 완벽 할 것입니다!

+1

이유는 메시지 테이블의 컬럼으로 센더를 가지고 있지? –

+0

thx Moron, 좋은 지적이야 :) – Anna

답변

2

첫 번째 문제는 쉽습니다. list에 외래 키를 설정하면됩니다. DELETE FROM messages WHERE messageID = 5 자동 listmessageID 설명 = 5뿐만 아니라. 당신은이 작업을위한 스토리지 엔진으로 InnoDB를 사용해야 할 것 ...

의 모든 행을 삭제할 것 (있도록 CASCADE 업데이트 및 삭제로 설정 한 것

두 번째 문제는 쉽습니다.

INSERT INTO list (senderID, receiverID, messageID) 
VALUES (sender_x_id, receiver_4_id, message_1_id), 
     (sender_x_id, receiver_5_id, message_1_id); 

을 그리고 다른에서 다른 사람을 제거 : : 그냥 하나 개의 질의에 새 행을 삽입

DELETE FROM list 
WHERE receiverID = receiver_1_id 
    AND messageID = message_1_id 
+1

누군가가 바코드 공장에서 곧 너를 구해주기를 바랍니다. – John

+0

도움 주셔서 감사합니다. 그냥 하나의 문제, 내가 목록에서 삭제할 행을 알지 : (내 스크립트는 (예 : rec1, rec2, rec10, rec12 ..) 수신기 목록을 가져오고 아마 내가 먼저 테이블 "목록에서 삭제해야합니다 "message_1_ID가있는 모든 행과 새로운 수신자가있는 새 행을 삽입하십시오. 다시 고마워요. – Anna

+0

글쎄, 당신은 세 가지 중 하나를 할 수 있습니다. 모두 삭제 한 다음 다시 삽입 할 수 있습니다. 당신은'어디서나 receiverID NOT IN ('rec1 ','rec2 ','rec10 ','rec12 ')'을 삭제할 수 있습니다 (그래서 이후에 추가하지 않을 사람들 만 삭제합니다). 또는 먼저 모든 항목을 선택하고 루프 스루하고 한 번에 하나씩 제거 된 항목을 삭제할 수 있습니다. 개인적으로 나는 (가장 쉽고 일관된) 두 번째 작업을 수행 할 것입니다 ... – ircmaxell

관련 문제