嘿伙计们快速提问,我目前有一个插入声明
$query= "INSERT into new_mail VALUES ('$to1', '0')";
其中字段为username,message_number为
目前我要做的是检查条目是否存在,是做一个select查询,然后用mysql_num_rows
(php)检查行数。如果rows == 1,那么我得到当前的 message_number 并将其设置为等于
$row['message_number']+1.
然后我用另一个查询更新该条目。
是否有一种更简单的方法可以在只有一个查询的mysql中完成所有这些(检查是否存在,如果不是插入,如果是这样更新message_number,增加1)?
答案 0 :(得分:5)
根据表格的结构,您可以使用INSERT
的{{3}}(链接到MySQL手册)功能:
INSERT into new_mail VALUES ('$to1', '0') ON DUPLICATE KEY UPDATE message_number=message_number+1
答案 1 :(得分:4)
使用INSERT...ON DUPLICATE KEY UPDATE
。 MySQL手册有一个例子,几乎完全符合你的需要:
INSERT INTO table (a,b,c) VALUES (1,2,3)
ON DUPLICATE KEY UPDATE c=c+1;
要完成此工作,您需要在用于检查重复项的列上添加UNIQUE索引。但有一个重要警告:
通常,您应该尽量避免在具有多个唯一索引的表上使用ON DUPLICATE KEY子句。
答案 2 :(得分:3)
对你的问题和你的桌面结构感到有些困惑,但我认为你想要这样的东西。
INSERT INTO new_mail (username, message_number)
VALUES ($username, $message_number)
ON DUPLICATE KEY UPDATE message_number=message_number + 1;
这假设username
是您的主键(更像是userid)。希望这会有所帮助。
答案 3 :(得分:1)
编辑:ON DUPLICATE KEY UPDATE答案更好,但你可以这样做(躲避选择查询):
假设你正在使用mysqli extenson:
$db = //Some construction of mysqli object;
$sql = 'UPDATE tablename SET RowValue = RowValue + 1 WHERE message_number = ?';
$updateStatement = $db->prepare($sql);
$updateStatement->bind_param('i', $message_number);
$message_number = //Set message number;
$updateStatement->execute();
if ($updateStatement->affectedRows == 0) {
$sql = 'INSERT INTO tablename (RowValue, message_number) VALUES (?, ?)';
$insertStatement = $db->prepare($sql);
$insertStatement->bind_param('ii', $rowValue, $messageNumber);
$rowValue = something;
$messageNumber = something;
$insertStatement->execute();
}