SQL查询 - 仅在记录不存在的情况下才进行INSERT?

时间:2016-04-21 10:00:05

标签: php mysql

所以,我正在编写一个SQL查询,就像你一样,我偶然发现了一个问题。我想要做的是每次唯一用户访问某个页面时在数据库中触发查询。唯一性是通过session_id()完成的,因为它通常非常可靠。

我想要的是一个SQL查询,它将一行数据插入两列,但只有这两列不具有相同的值。

如果用户x访问了名为page1的页面,那么在数据库中,它将按如下所示进行记录:

+------------+---------+
| page_name  | user_id |
+------------+---------+
|    page1   |    x    |
+------------+---------+

我如何编写一个检查表的查询,以查看插入的数据是否会重复?

我当前的查询如下(它只是一个标准的插入查询):

INSERT INTO `page_views` (`page_name`, `user_id`) VALUES ('.$pageName.', \''.session_id().'\')

2 个答案:

答案 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
    }