2011-05-07 105 views
1

我有一些对象。他们可以分成组。当用户“拖拽”的对象为一组,我将记录插入我的数据库帮助逻辑

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) 
+0

你应该有群体 – Ibu 2011-05-07 23:05:27

+1

一个单独的表,是什么问题?您是否每次在更改某个对象的$ groupID之后都要求解决方案自动生成该解决方案?有可能的。提出这个问题 - 您需要SQL查询,某些特定主题的建议,数据库结构,ORM提案或其他内容? – Tadeck 2011-05-07 23:16:55

回答

1

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

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 2011-05-08 12:25:35

0

我建议你添加一个代理主键,因此您可以您可以唯一标识每一行。然后你就可以作出这样一个更新:

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 2011-05-09 14:48:27

+0

@santa您可以更新多个项目 - 查看insert命令的文档,您将看到可以执行多个更新,并以逗号分隔:... ON DUPLICATE KEY UPDATE group_id = $ groupID,otheritem = $ someval – Benubird 2011-05-11 22:37:21