php - 用于记录尝试插入已存在行的列

标签 php mysql sql count primary-key

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

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

+-------+----------------------------------+--------------+
| 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/

相关文章:

php - 将挂单分成两组

android - 将图像从数据库显示并解析到 ListView

SQL 插入列名作为数据

SQL-如何在不自动递增 ID 列的情况下插入行?

php - 关于 CHMOD 的澄清

php - 使用 youtube gdata API 检索直接上传的进度

javascript - 根据文本输入显示/隐藏星号

mysql - 如何导出和导入现有用户(及其特权!)

mysql - 选择 * 和查询优化器

php - 将表列中的 DEC 值转换为十六进制