帮助逻辑

时间:2011-05-07 23:03:29

标签: php mysql sql

我有很多物品。它们可以分组。当用户将对象“拖动”到组中时,我将记录插入到我的db

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

同一组中可以有多个对象,这些对象可以从一个组移动到另一个组。当我将对象移动到另一个组时,我不需要创建另一个记录,而只需要更新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)

3 个答案:

答案 0 :(得分:1)

听起来你应该在从一个组移动到另一个组时只放置一个if语句来更新正在移动的对象。比方说,如果我从其初始(开始)空间中选择一个对象,我会添加insert语句。如果我正在移动已经分组到另一个组的对象,我会添加一个更新语句。最后,如果我完全从所有组中取出一个项目,我会发出一个删除语句,从表中删除该对象。

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
}

这个代码序列应放在您拖动对象的每个容器上,以便它可以检查正确的要求。

答案 1 :(得分:1)

您可以在一次查询中使用insert ... on duplicate key update。

有关详细信息,请参阅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

答案 2 :(得分:0)

我建议您添加代理主键,以便您可以唯一地识别每一行。然后你可以进行这样的更新:

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