0

我正在尝试创建一个列并使其计算用户进行的插入尝试次数。

一个例子会让事情变得更清楚:

+-------+----------------------------------+--------------+
| text  |            md5                   | insert_times | 
+-------+----------------------------------+---------+----+
| 123   | 202cb962ac59075b964b07152d234b70 |     834      |  
| abc   | 900150983cd24fb0d6963f7d28e17f72 |     923      |      
+-------+----------------------------------+--------------+

哪里text是主键。
每当用户尝试插入123(因为已经存在而使用INSERT IGNORE不获取错误消息)时,将增加,跟踪在表中插入已经存在的文本的尝试次数。123insert_times1

关于如何制作的任何想法?
我无法制作触发器,因为我的数据库主机(godaddy)不允许触发器。
如果无法做到mysql,我可以在 的帮助下完成php吗?

4

3 回答 3

2

要在单个简单查询中执行此操作,只需使用ON DUPLICATE KEY UPDATEMySQL 中的函数。有了这个,您只需执行 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);
}

如果需要,此方法也为触发其他事件/功能留出了更多空间。

于 2012-07-15T04:12:39.203 回答
1

检查该记录是否已存在于该特定键的表中,如果是,则将 insert_times 值更新为insert_times+1;,否则创建新记录。

于 2012-07-15T04:07:24.133 回答
0

您可以在脚本中放置一些逻辑,在尝试插入之前检查该行是否存在。如果它不存在,请执行 INSERT 查询。如果是,则增加 insert_times 字段。

您还可以保留一个没有唯一性约束的单独 insert_attempts 表。对于每次插入行的尝试,您将执行两个查询:一个是您现在正在执行的查询,一个是针对 insert_attempts 的查询。insert_attempts 可以插入一个新行,然后对具有相关 ID 的行进行 COUNT() 操作,或者它可以只检查与该 ID 关联的数字并更新它。

于 2012-07-15T04:07:47.817 回答