检查数据库中是否存在名称(名字姓氏)

时间:2014-08-11 08:15:33

标签: mysql sql regex

我有一个包含名称的表的数据库,名称列中的一些示例:

  • " John Doe"
  • " Kevin De Bruyne"

所以你会注意到一个名字包含多个单词。

我还有一个带有名单列表的电子表格,这是结构:

  • " DOE John"
  • " DE BRUYNE Kevin"

(姓名在大写字母和名字前面)

我的问题是如何编写一个查询,检查我的电子表格中的名称是否已存在于数据库中。

我尝试了一些基本的查询,但我无法弄明白,所以我认为我需要正则表达式来分割这些单词?我怎么能这样做?

这是我必须拆分的话,我该如何构建查询?谢谢!

(\b[^\s]+\b) (splits "My name is Onovar" into "My","name","is" and "Onovar")

*数据库结构:

  • 数据库名称:mydb
  • table:people
  • 列:名称

所以我需要这样的东西:如果来自电子表格'在表人中不存在,插入传播表的名称'进入表人*

2 个答案:

答案 0 :(得分:0)

你可以这样做。

$array = explode(" ", $string);
$names = implode(",", $array);
$query = "SELECT * FROM persons WHERE id IN ($names)";

然后使用PDO或mysqli运行查询。

修改

错过了这个问题。以上解决方案使用php 您真正需要的是逗号分隔列表中的所有名称,然后您可以使用此查询

"SELECT * FROM persons WHERE id IN ($names)"

其中$ name将是逗号分隔列表。

答案 1 :(得分:0)

好的,我找到了。

所以我把我的excel中的数据放在一个数组中。

$array = ["name1 firstname1","name2 firstname2",...];

我通过每个元素,分开单词(空格)

foreach ($array as $element){
        $subex =  explode(' ', $element);

然后我将最后一个元素复制到前面

array_unshift($subex , end($subex));

并删除最后一部分,所以我有这个数组:" firstname,name"

array_pop($subex);

接下来,我打破了数组,所以我得到一个这样的字符串:" firstname name"

$naam = implode(' ', $subex);

之后我把所有东西都小写

$low = strtolower($naam);

除了每个单词的第一个字母,它们必须是大写

$up = ucwords($low);

之后我创建了myqsl查询,跳过双打并添加新的

echo 'INSERT IGNORE INTO politici
    SET naam = "'.$up.'",
    partij_id = 23;';
    echo '<br />';

}

我必须确保每个名称列都是唯一的。