2010-10-04 101 views
0

只有两列,我想只在menu_id存在时更新。否则,我想插入一个新的行。这里是我的查询:SQL REPLACE不能正常工作

REPLACE `dol_subs_menu_access` 
SET `menu_id` = '{$aVars['menu_item']}', 
`mlevels` = '{$sMemLevels}' 

这将创建一个新的行每次。有什么我失踪?

+1

'REPLACE'在SQL执行字符串替换为子串中的字符串较长。听起来你想'更新'该领域的实际内容到别的东西,这是正确的吗?你还用什么数据库? – JNK 2010-10-04 17:47:56

+1

@JNK:参见[MySQL的REPLACE语句](http://dev.mysql.com/doc/refman/5.1/en/replace.html)。 – 2010-10-04 17:49:26

+0

MySQL对不起,是的,我猜更新是我正在寻找。但如果记录不在那里,我该如何插入一个新的?我想保留它到一个单一的查询 – tmartin314 2010-10-04 17:51:25

回答

2

要么是列在你的声明中的主键?我的猜测是,他们都没有,这是什么REPLACE statement(不要与字符串替换功能相混淆)需要确定它是否更换VS插入...

2

你可能想看看​​。这将允许您插入记录或更新记录(如果它已存在)。您将需要在查询中包含主键。

这里是他们的文档页面查询示例:

INSERT INTO table (a,b,c) VALUES (1,2,3) 
    ON DUPLICATE KEY UPDATE c=c+1; 

我认为这将是这个样子的查询(测试它第一次虽然)

INSERT INTO `dol_subs_menu_access` (menu_id,mlevels) 
     VALUES ('{$aVars['menu_item']}','{$sMemLevels}') 
ON DUPLICATE KEY UPDATE mlevelsMemLevels='{$sMemLevels}'; 
+0

或'mlevelsMemLevels = VALUES(mlevelsMemLevels)',没有必要把字符串中的两倍。 – Wrikken 2010-10-04 18:07:09