我正在尝试创建一个列并使其计算用户尝试插入的次数。
举个例子会让事情变得更清楚:
+-------+----------------------------------+--------------+
| text | md5 | insert_times |
+-------+----------------------------------+---------+----+
| 123 | 202cb962ac59075b964b07152d234b70 | 834 |
| abc | 900150983cd24fb0d6963f7d28e17f72 | 923 |
+-------+----------------------------------+--------------+
其中 text
是主键。
每当用户尝试插入 123
(使用 INSERT IGNORE
以避免收到错误消息,因为 123
已存在)时,insert_times
code> 将增加 1
,跟踪在表中插入现有文本的尝试次数。
关于如何制作它有什么想法吗?
我无法创建触发器,因为我的数据库主机(godaddy)不允许触发器。
如果在 mysql
中无法完成,我可以在 php
的帮助下完成它吗?
最佳答案
要在单个简单查询中执行此操作,只需使用 ON DUPLICATE KEY UPDATE
MySQL 中的函数。这样,您只需执行 INSERT,然后执行“重复”行中需要更新的内容即可。例如:
INSERT INTO tbl (text, md5, insert_times) VALUES ('abc', {MD5}, 0}
ON DUPLICATE KEY UPDATE insert_times+1;
但是,我个人更喜欢 PHP 方法,因为在我的大多数查询中,事情通常不像简单的更新那么简单:
$res = mysql_query(sprintf("SELECT text FROM tbl WHERE text = '%s'", $text));
if (mysql_num_rows($res) != 0)
{
mysql_query(sprintf("UPDATE tbl SET insert_times+1 WHERE text = '%s'", $text);
}
else
}
mysql_query(sprintf("INSERT INTO tbl SET text = '%d', md5 = '%s'", $text, $hash);
}
如果需要,此方法还可以留出更多空间来触发其他事件/功能。
关于php - 用于记录尝试插入已存在行的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11489298/