我正在尝试创建一列,并使其计算用户进行的插入尝试次数。
一个例子会让事情变得更清楚:
+-------+----------------------------------+--------------+
| text | md5 | insert_times |
+-------+----------------------------------+---------+----+
| 123 | 202cb962ac59075b964b07152d234b70 | 834 |
| abc | 900150983cd24fb0d6963f7d28e17f72 | 923 |
+-------+----------------------------------+--------------+
其中CCD_ 1是主键
每当用户尝试插入123
(由于123
已经存在,所以使用INSERT IGNORE
不获取错误消息)时,insert_times
将增加1
,从而跟踪在表中插入已经存在的文本的尝试次数。
有什么制作方法的想法吗
我无法制作触发器,因为我的数据库主机(godaddy)不允许使用触发器
如果在mysql
中无法做到,我可以在php
的帮助下完成吗?
要在一个简单的查询中做到这一点,只需在MySQL中使用ON DUPLICATE KEY UPDATE
函数。这样,您只需在"重复"行中执行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);
}
如果需要的话,这种方法还有更多的空间来触发其他事件/函数。
检查该特定键的表中是否已经存在该记录,如果存在,则将insert_times值更新为text
0,否则创建一个新记录。
您可以在脚本中放入一些逻辑,在尝试插入行之前检查行是否存在。如果不存在,请执行insert查询。如果是,则递增insert_times字段。
您还可以保留一个单独的insert_attempts表,该表没有唯一性约束。对于每一次插入行的尝试,都要执行两个查询:一个是现在正在执行的查询,另一个是insert_attempts。insert_attempts可以插入一个新行,然后用相关ID计数()行,也可以只检查与该ID相关的编号并更新它。