Php 如何有效地为WHERE条件返回多组值匹配的行?
我有一个包含以下列的表:Php 如何有效地为WHERE条件返回多组值匹配的行?,php,mysql,Php,Mysql,我有一个包含以下列的表: id, name, surname 我有以下sql查询: SELECT `id` from `table` WHERE name = 'John' AND surname = 'Smith'; 由于我有一个名称和姓氏列表,我想检查它们是否存在于表中,因此我想进行一次查询并返回id(如果集合的名称和姓氏都匹配)或空id(或零),以表明名称和姓氏的组合不匹配 所以我基本上是这样的: SELECT `id` from `table` WHERE name = 'John'
id, name, surname
我有以下sql查询:
SELECT `id` from `table` WHERE name = 'John' AND surname = 'Smith';
由于我有一个名称和姓氏列表,我想检查它们是否存在于表中,因此我想进行一次查询并返回id(如果集合的名称和姓氏都匹配)或空id(或零),以表明名称和姓氏的组合不匹配
所以我基本上是这样的:
SELECT `id` from `table` WHERE name = 'John' AND surname = 'Smith';
SELECT `id` from `table` WHERE name = 'Claudia' AND surname = 'Janssen';
SELECT `id` from `table` WHERE name = 'Eduart' AND surname = 'Allen';
SELECT `id` from `table` WHERE name = 'Don' AND surname = 'Diablo';
SELECT `id` from `table` WHERE name = 'Esther' AND surname = 'Smith';
(这些查询中有大量)
我认为中的语句不起作用,因为如果在表中找到同名的人和同名的人,它也会返回id。找到组合是很重要的
我的问题是:如何有效地执行上面5个单一查询所规定的mysql查询?这就是您想要的吗
SELECT `id`
FROM `table`
WHERE (`name` = 'John' AND `surname` = 'Smith')
OR (`name` = 'Claudia' AND `surname` = 'Janssen')
OR (`name` = 'Eduart' AND `surname` = 'Allen')
OR (`name` = 'Don' AND `surname` = 'Diablo')
OR (`name` = 'Esther' AND `surname` = 'Smith');
这就是你要找的吗
SELECT `id`
FROM `table`
WHERE (`name` = 'John' AND `surname` = 'Smith')
OR (`name` = 'Claudia' AND `surname` = 'Janssen')
OR (`name` = 'Eduart' AND `surname` = 'Allen')
OR (`name` = 'Don' AND `surname` = 'Diablo')
OR (`name` = 'Esther' AND `surname` = 'Smith');
这就是你要找的吗
SELECT `id`
FROM `table`
WHERE (`name` = 'John' AND `surname` = 'Smith')
OR (`name` = 'Claudia' AND `surname` = 'Janssen')
OR (`name` = 'Eduart' AND `surname` = 'Allen')
OR (`name` = 'Don' AND `surname` = 'Diablo')
OR (`name` = 'Esther' AND `surname` = 'Smith');
这就是你要找的吗
SELECT `id`
FROM `table`
WHERE (`name` = 'John' AND `surname` = 'Smith')
OR (`name` = 'Claudia' AND `surname` = 'Janssen')
OR (`name` = 'Eduart' AND `surname` = 'Allen')
OR (`name` = 'Don' AND `surname` = 'Diablo')
OR (`name` = 'Esther' AND `surname` = 'Smith');
您可以使用
或:
SELECT id
FROM table
WHERE (name = 'John' and surname 'Smith')
OR (name = 'Claudia' and surname 'Janssen')
OR (name = 'Eduart' and surname 'Allen')
...
确保使用括号,因为和
和或
之间的优先级较高
您还可以使用UNION
,如果在name
和names
列上有索引,这可能会更有效,因为或条件可能不使用它们
SELECT id from table WHERE name = 'John' and surname 'Smith'
UNION
SELECT id from table WHERE name = 'Claudia' and surname 'Janssen'
UNION
SELECT id from table WHERE name = 'Eduart' and surname 'Allen'
UNION
...
您可以使用或:
SELECT id
FROM table
WHERE (name = 'John' and surname 'Smith')
OR (name = 'Claudia' and surname 'Janssen')
OR (name = 'Eduart' and surname 'Allen')
...
确保使用括号,因为和
和或
之间的优先级较高
您还可以使用UNION
,如果在name
和names
列上有索引,这可能会更有效,因为或条件可能不使用它们
SELECT id from table WHERE name = 'John' and surname 'Smith'
UNION
SELECT id from table WHERE name = 'Claudia' and surname 'Janssen'
UNION
SELECT id from table WHERE name = 'Eduart' and surname 'Allen'
UNION
...
您可以使用或:
SELECT id
FROM table
WHERE (name = 'John' and surname 'Smith')
OR (name = 'Claudia' and surname 'Janssen')
OR (name = 'Eduart' and surname 'Allen')
...
确保使用括号,因为和
和或
之间的优先级较高
您还可以使用UNION
,如果在name
和names
列上有索引,这可能会更有效,因为或条件可能不使用它们
SELECT id from table WHERE name = 'John' and surname 'Smith'
UNION
SELECT id from table WHERE name = 'Claudia' and surname 'Janssen'
UNION
SELECT id from table WHERE name = 'Eduart' and surname 'Allen'
UNION
...
您可以使用或:
SELECT id
FROM table
WHERE (name = 'John' and surname 'Smith')
OR (name = 'Claudia' and surname 'Janssen')
OR (name = 'Eduart' and surname 'Allen')
...
确保使用括号,因为和
和或
之间的优先级较高
您还可以使用UNION
,如果在name
和names
列上有索引,这可能会更有效,因为或条件可能不使用它们
SELECT id from table WHERE name = 'John' and surname 'Smith'
UNION
SELECT id from table WHERE name = 'Claudia' and surname 'Janssen'
UNION
SELECT id from table WHERE name = 'Eduart' and surname 'Allen'
UNION
...
您也可以尝试将这两个部分连接起来,并按如下方式进行搜索:
SELECT id, CONCAT_WS(",", surname, name) AS FullName
FROM table1
HAVING FullName IN (
"hand,bob",
"smith,steve",
"brown,rob",
"green,tom"
)
或
工作小提琴:您也可以尝试将这两个部分连接起来,并按如下方式进行搜索:
SELECT id, CONCAT_WS(",", surname, name) AS FullName
FROM table1
HAVING FullName IN (
"hand,bob",
"smith,steve",
"brown,rob",
"green,tom"
)
或
工作小提琴:您也可以尝试将这两个部分连接起来,并按如下方式进行搜索:
SELECT id, CONCAT_WS(",", surname, name) AS FullName
FROM table1
HAVING FullName IN (
"hand,bob",
"smith,steve",
"brown,rob",
"green,tom"
)
或
工作小提琴:您也可以尝试将这两个部分连接起来,并按如下方式进行搜索:
SELECT id, CONCAT_WS(",", surname, name) AS FullName
FROM table1
HAVING FullName IN (
"hand,bob",
"smith,steve",
"brown,rob",
"green,tom"
)
或
Working fiddle:您确定无法在此处识别任何错误吗?您的SQL查询不正确。是的,有一些“美丽”错误,请编辑它们。引号用于创建字符串。如果要转义列名和表名,应使用反勾号。是否确定此处无法识别任何错误?您的SQL查询不正确。是的,存在一些“美观”错误,请编辑它们。引号用于创建字符串。如果要转义列名和表名,应使用反勾号。是否确定此处无法识别任何错误?您的SQL查询不正确。是的,存在一些“美观”错误,请编辑它们。引号用于创建字符串。如果要转义列名和表名,应使用反勾号。是否确定此处无法识别任何错误?您的SQL查询不正确。是的,存在一些“美观”错误,请编辑它们。引号用于创建字符串。如果要转义列和表名,应该使用反勾号。由于名称列表很大,这不是很有效吗?此外,使用这种方法,我不知道什么时候某个组合不匹配(或者我必须使用循环服务器端进行检查,这也需要时间)您可以添加到列表中,选择名称
和姓氏
,并验证找到了哪一个。使用这种方法,您可以将查询减少为一个查询。无论如何,您都需要在服务器上使用loop,因为您要返回id的数组。由于名称列表很大,这不是很有效吗?另外,使用这种方法,我不知道什么时候某个组合不匹配(或者我必须使用loop服务器端进行检查,这也需要时间)您可以添加到列表中,选择名称
和姓氏
,并验证找到了哪一个。使用这种方法,您可以将查询减少为一个查询。无论如何,您都需要在服务器上使用loop,因为您要返回id的数组。由于名称列表很大,这不是很有效吗?另外,使用这种方法,我不知道什么时候某个组合不匹配(或者我必须使用loop服务器端进行检查,这也需要时间)您可以添加到列表中,选择名称
和姓氏
,并验证找到了哪一个。使用这种方法,您可以将查询减少为一个查询。无论如何,您都需要在服务器上使用loop,因为您要返回id的数组。由于名称列表很大,这不是很有效吗?另外,使用这种方法,我不知道什么时候某个组合不匹配(或者我必须使用loop服务器端进行检查,这也需要时间)您可以添加到列表中,选择名称
和姓氏
,并验证找到了哪一个。使用这种方法,您可以将查询减少为一个查询。无论如何,您都需要在服务器上使用loop,因为您要返回id的数组。这种方法是否仍然使用name上的索引?@BastiaanWW我没有选中,所以不能说是sur