所以,我正在编写一个SQL查询,就像你一样,我偶然发现了一个问题。我想要做的是每次唯一用户访问某个页面时在数据库中触发查询。唯一性是通过session_id()完成的,因为它通常非常可靠。
我想要的是一个SQL查询,它将一行数据插入两列,但只有这两列不具有相同的值。
如果用户x
访问了名为page1
的页面,那么在数据库中,它将按如下所示进行记录:
+------------+---------+
| page_name | user_id |
+------------+---------+
| page1 | x |
+------------+---------+
我如何编写一个检查表的查询,以查看插入的数据是否会重复?
我当前的查询如下(它只是一个标准的插入查询):
INSERT INTO `page_views` (`page_name`, `user_id`) VALUES ('.$pageName.', \''.session_id().'\')
答案 0 :(得分:9)
使用INSERT IGNORE而不是INSERT。如果记录没有复制现有记录,MySQL会像往常一样插入它。如果记录是重复的,则IGNORE关键字告诉MySQL以静默方式丢弃它而不会产生错误。
以下示例不会出错,同时也不会插入重复记录。
语法很简单 - 只需在“INSERT”之后添加“IGNORE”,如下所示:
INSERT IGNORE INTO mytable
(pk, f1, f2)
VALUES
('abc', 1, 2);
插入多条记录 当一次插入多个记录时,任何不能插入的记录都不会,但任何可能的记录都会出现:
INSERT IGNORE INTO mytable
(pK, f1, f2)
VALUES
('abc', 1, 2),
('def', 3, 4),
('ghi', 5, 6);
在上面的第二个例子中,如果已经存在'abc'和'def'的记录,则不会插入这两个记录,但是'ghi'的记录将是。
答案 1 :(得分:0)
检查数据库,选择是否已经存在:)代码示例如下。
$checkQuery = "SELECT page_name FROM page_views WHERE page_name='".$pageName."' AND user_id='".session_id()."'";
$checkResult = mysqli_query($DBLink, $checkQuery);
if (mysqli_num_rows($checkResult) != 0){
// CODE FOR IF DUPLICATE FOUND
} else {
// NO DUPLICATE CODE GOES HERE
}