我有一个PHP脚本搜索脚本,记录MySQL数据库中的每个查询。目前,如果多次搜索相同的术语,则会将查询的副本添加到数据库中。当术语已经存在于数据库中时,如何将+1添加到标题为值的列中?
我的PHP代码是:
<?php
$database=mysql_connect("localhost","username","password");
mysql_select_db("database",$database);
$query=$_GET['q'];
logQuery($query);
function logQuery($query){
$query="insert into queries (query) values ('$query')";
mysql_query($query);
}
?>
答案 0 :(得分:3)
首先,使用以下方法在query
字段上创建唯一索引:
CREATE UNIQUE INDEX query_idx ON queries (query)
然后,当找到重复的INSERT
时,更改value
查询以更新query
字段(它会点击query_idx
索引):
INSERT INTO queries (query) VALUES ('$query')
ON DUPLICATE KEY UPDATE value = value + 1
请查看INSERT ... ON DUPLICATE KEY UPDATE
的文档,了解有关此问题的详细信息。
另外,不要忘记使用mysql_real_escape_string($query)
而不是简单地使用$query
,因为如果你没有转义字符串而$query
变量包含,例如'
1}}字符,它会损坏您的INSERT
查询。
答案 1 :(得分:0)
您可以执行INSERT On Duplicate并向查询添加名为value的列。只需确保将查询列设置为唯一索引
在您的SQL上:
<?php
$database=mysql_connect("localhost","username","password");
mysql_select_db("database",$database);
$query=$_GET['q'];
logQuery($query);
function logQuery($query){
$query="insert into queries (query) values ('$query')
on duplicate key update value=value+1;
";
mysql_query($query);
}
?>