我有一个包含名字的表的数据库,在名字列中的一些例子:
- "John Doe"
- "Kevin De Bruyne"
所以你会注意到一个名字包含多个单词。
我也得到了一个电子表格列表的名字,这是那里的结构:
- "能源部的约翰"
- "DE BRUYNE Kevin"
(姓氏大写并放在名字前面)
我的问题是如何编写一个查询,检查我的电子表格中的名称是否已经在数据库中。
我尝试了一些基本的查询,但我无法弄清楚,所以我想我需要正则表达式来分割单词?我该怎么做呢?
这就是我要分割的词,我怎么能建立查询?谢谢你!
(b[^s]+b) (splits "My name is Onovar" into "My","name","is" and "Onovar")
*数据库结构:
- 数据库名称:mydb <
- 表:人/gh>
- 专栏:名称
所以我需要这样的东西:如果'名称从电子表格'不存在于表的人,插入'电子表格的名称'到表的人*
您可以这样做。
$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是逗号分隔的列表。
好的,我找到了。
所以我把我的数据从我的excel在一个数组。
$array = ["name1 firstname1","name2 firstname2",...];
i遍历每个元素,拆分单词(空格)
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 />';
}
并且我必须确保每个name列都是唯一的