2011-05-07 2 views
1

개체가 여러 개 있습니다. 그들은 그룹으로 분류 될 수 있습니다. 사용자가 그룹으로 객체를 "드래그"할 때, 나는로직 도움말

INSERT INTO t1 
    (group_id, item_id, project_id, user_id) 
VALUES 
    ($groupID, $itemID, $projectID, $userID) 

같은 그룹에있는 여러 개체가있을 수 있습니다 내 DB에 레코드를 삽입하고 해당 개체가 한 그룹에서 다른 그룹으로 이동할 수 있습니다. 객체를 다른 그룹으로 이동할 때 다른 레코드를 작성할 필요가 없으며 group_id 만 업데이트하면됩니다.


편집 :

table structure 
t1.id 
t1.group_id 
t1.item_id 
t1.project_id 
t1.user_id 

if ("SELECT id, group_id FROM t1 
    WHERE item_id = $itemID 
    AND project_id = $projectID 
    AND user_id = $userID")) { 

    // if found 
    UPDATE t1 
    SET group_id = $groupID 
    WHERE id = $ID 

} else { 

    INSERT INTO t1 
    (group_id, item_id, project_id, user_id) 
    VALUES ($groupID, $itemID, $projectID, $userID) 
+0

당신은 그룹 – Ibu

+1

에 대한 별도의 테이블이 있어야합니다 그리고 질문이 무엇을 할 수 있는가? 어떤 객체에 대해 $ groupID를 변경할 때마다 자동으로 솔루션을 만들 것을 요청합니까? 것이 가능하다. 질문하십시오 - SQL 쿼리, 특정 주제에 대한 조언, 데이터베이스 구조, ORM 제안 또는 다른 것이 필요합니까? – Tadeck

답변

1

그것은 소리 : 그럼 당신은이 같은 업데이트를 할 수 있습니다. 인스턴스의 초기 (시작) 공간에서 객체를 선택하는 경우 insert 문을 추가한다고 가정 해 보겠습니다. 이미 다른 그룹으로 그룹화 된 개체를 이동하는 경우 업데이트 문을 추가합니다. 마지막으로 모든 그룹에서 항목을 완전히 가져 오는 중이면 테이블에서 개체를 제거하는 delete 문을 실행합니다.

pseudo code 

if object = new 
{ 
INSERT INTO t1 (group_id, item_id, project_id, user_id) 
VALUES ($groupID, $itemID, $projectID, $userID) 
} 
if object = group 
} 
UPDATE t1 
SET group_id = $newgroupID 
WHERE item_id = $itemID; 
} 
if object = banned 
} 
delete from t1 where item_id = $itemID 
} 

이 코드 시퀀스는 적절한 요구 사항을 확인할 수 있도록 개체를 끌고있는 각 컨테이너에 배치해야합니다.

+0

그게 내가 기대고 있었던 것이지만 너무 많은 코드 솔루션인지 확실하지 않았다. 내 업데이트를 참조하십시오. – santa

0

난 당신이 유일하게 모든 행을 식별 할 수 있도록 대리 기본 키를 추가하는 것이 좋습니다 :

는 나는이 Afterall는 뭔가를 할 필요가 있다고 생각. 객체 만 인 움직임을 업데이트하는 다른 그룹에 그룹에서 이동할 때 u는 if 문을 배치해야처럼

UPDATE t1 SET group_id = $newgroupid WHERE id = $objectid; 
1

중복 키 업데이트시 삽입 ...을 사용하여 하나의 쿼리로 수행 할 수 있습니다.

자세한 내용은 http://dev.mysql.com/doc/refman/5.5/en/insert-on-duplicate.html을 참조하십시오.

ITEM_ID가 열쇠라고 가정하면,

INSERT INTO t1 
    (group_id, item_id, project_id, user_id) 
VALUES 
    ($groupID, $itemID, $projectID, $userID) 
ON DUPLICATE KEY UPDATE group_id = $groupID 
+0

이것은 좋은 생각입니다. 그룹에 여러 항목을 가질 수 있기 때문에 사용할 수 있지만 다음 번에는 고유 한 값을 처리 할 때 사용하는 것을 기억합니다. 제안 해 주셔서 감사합니다. +1 – santa

+0

@santa 여러 항목을 업데이트 할 수 있습니다 - insert 명령에 대한 문서를 살펴보면 쉼표로 구분 된 여러 개의 업데이트를 볼 수 있습니다 : ... 중복 된 키 업데이트 group_id = $ groupID, otheritem = $ someval – Benubird