代码之家  ›  专栏  ›  技术社区  ›  Bapholin

插入时检查可能的重复数据

  •  0
  • Bapholin  · 技术社区  · 1 年前

    我试着用谷歌搜索它,但还没有找到与我的完全一致的。

    所以在DB中有一个记录“月光”。 我想检查一下用户是否尝试输入“PX Moon Light”或“Moon Light Corp”,它必须被拒绝,因为它可能与现有记录相似的公司。

    我逐一尝试(从另一个线程中找到)的是:

    $name = $_POST['name']; //in this case user typed 'PX Moon Light';
    
    $sql = "SELECT name FROM tbl_company WHERE name REGEXP '$^$name' LIMIT 1";
    
    $sql = "SELECT name FROM tbl_company WHERE name REGEXP '$^$name^$' LIMIT 1";
    
    $sql = "SELECT name FROM tbl_company WHERE name REGEXP '^$name^' LIMIT 1";
    
    $sql = "SELECT name FROM tbl_company WHERE name REGEXP '$name' LIMIT 1";
    
    $sql = "SELECT name FROM tbl_company WHERE name LIKE '%PX Moon Light%' LIMIT 1";
    

    然后

    $res = mysqli_query($conn,$sql);
    
    if(mysqli_num_rows($res)>0) {
        echo 'rejected, possible similar data';
    }
    

    但所有这些SQL都已成功插入数据库。应该被拒绝。

    有什么MySQL方法可以用于它吗?请告知。非常感谢。

    1 回复  |  直到 1 年前
        1
  •  0
  •   vht981230    1 年前

    看起来您只是想在继续插入之前,在数据库中查询数据库中与输入类似的公司名称。如果是这样的话,您可以使用下面的mysql查询

    SELECT * FROM tbl_company where '<input name>' LIKE CONCAT('%',name,'%');
    

    在你的代码中,它就像

    $sql = "SELECT name FROM tbl_company WHERE '$name' LIKE CONCAT('%',name,'%')";
    

    或者,您还可以执行插入操作,并检查查询中不包含的条件 Moon Light 字符串使用 INSERT INTO SELECT 。这样,在使用之前,您不需要执行初始选择查询来检查数据库中是否存在记录 INSERT 查询

    INSERT INTO tbl_company(name)
    SELECT name from (SELECT 'PX Moon Light' as name) iv where iv.name not like '%Moon Light%';
    
    INSERT INTO tbl_company(name)
    SELECT name from (SELECT 'Moon Light Corp' as name) iv where iv.name not like '%Moon Light%';