在插件中使用mysql的更新

时间:2017-07-26 01:54:53

标签: php mysql database

我有一个使用select子查询运行的插入查询。这基本上需要"分叉"找到并插入的行的副本。这部分有效,但没有垃圾收集。我在数据库事件上运行它,因此它根据条件查找记录,然后将其作为新记录分叉...再次运行将其关闭。任何想法,所以它找到的记录可能会更新或停止循环。

INSERT INTO charity (pid, itemname, newval)
SELECT cha.pid, cha.itemname, 'ref') 
FROM charity AS cha, entry AS ent
WHERE cha.pid = ent.id 
AND cha.status = 'Pending' 
AND cha.type = 'CHAR' 
AND ent.dates < CURDATE()
AND ent.total > (SELECT sum(price) FROM charity WHERE cha.type = 'CHAR') 

1 个答案:

答案 0 :(得分:0)

您可以对表进行左连接以匹配分叉记录,并排除那些已经分叉的记录。

INSERT INTO charity (pid, itemname, newval)
SELECT cha.pid, cha.itemname, 'ref') 
FROM charity AS cha, entry AS ent
left outer join charity as cha2 
   on cha2.pid=cha.pid and cha2.itemname = cha.itemname and
      cha2.newval='ref'
WHERE cha.pid = ent.id 
AND cha.status = 'Pending' 
AND cha.type = 'CHAR' 
AND ent.dates < CURDATE()
AND ent.total > (SELECT sum(price) FROM charity WHERE cha.type = 'CHAR') 
AND cha2.pid IS NULL

警告 - 未经测试。我没有足够的信息来充分指定可能已经创建的记录。

您可能还需要在join on子句中添加更多测试。基本上,这会找到尚未创建相关新记录的记录 - 在这种情况下是reford with newval ='ref',其他2个字段匹配。