我有一个包含名称的表的数据库,名称列中的一些示例:
所以你会注意到一个名字包含多个单词。
我还有一个带有名单列表的电子表格,这是结构:
(姓名在大写字母和名字前面)
我的问题是如何编写一个查询,检查我的电子表格中的名称是否已存在于数据库中。
我尝试了一些基本的查询,但我无法弄明白,所以我认为我需要正则表达式来分割这些单词?我怎么能这样做?
这是我必须拆分的话,我该如何构建查询?谢谢!
(\b[^\s]+\b) (splits "My name is Onovar" into "My","name","is" and "Onovar")
*数据库结构:
所以我需要这样的东西:如果来自电子表格'在表人中不存在,插入传播表的名称'进入表人*
答案 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 />';
}
我必须确保每个名称列都是唯一的。