Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否有一个Mysql函数来查看是否有一个结果或多个结果Mysql查询?_Mysql - Fatal编程技术网

是否有一个Mysql函数来查看是否有一个结果或多个结果Mysql查询?

是否有一个Mysql函数来查看是否有一个结果或多个结果Mysql查询?,mysql,Mysql,我们正在编写代码来匹配提交给用户的内容。给定名字、姓氏等,我们试图缩小到一个结果。但是,提交的地址或其他联系信息可能拼写错误,因此我们希望尽可能根据几个标准进行匹配,因此需要多个步骤才能找到匹配项 以下是算法: Count by first name and last name if count == 1 // done if count > 1, count by first name, last name, email if count == 1 // done // etc.

我们正在编写代码来匹配提交给用户的内容。给定名字、姓氏等,我们试图缩小到一个结果。但是,提交的地址或其他联系信息可能拼写错误,因此我们希望尽可能根据几个标准进行匹配,因此需要多个步骤才能找到匹配项

以下是算法:

Count by first name and last name
if count == 1 // done

if count > 1, count by first name, last name, email
if count == 1 // done

// etc.
判断我们是否会得到一个人的结果的最佳方法是什么

显而易见的答案是计数,但这是不必要的,因为我们不需要数字,我们只需要看看它是复数结果还是单数结果。匹配可能会很糟糕,返回数千个计数。另一个选项是限制为2个结果,这将使计数最小化,但会添加一些令人困惑的代码如果计数也受到限制,为什么还要进行计数


有没有更好的方法来执行此操作?

MySQL没有一个函数可以告诉您是否有一个或多个匹配项。 正如你所说,你的选择是计数*或使用极限2

LIMIT选项的执行速度应该更快,但我将假设两者之间的性能差异并不大。 这是您应该在真实数据上验证的内容,当然您应该在first_name和last_name上有一个索引

在这种情况下,可以通过运行单个查询来保存运行的第二个查询:

SELECT first_name, last_name, email
FROM users
WHERE first_name = 'foo'
AND last_name = 'bar'
然后,在您的代码中,您可以轻松获得结果的计数

如果你明白了


如果更多->您的结果集中已经有电子邮件,可以使用它来过滤您需要的记录。

电子邮件通常是个人独有的。如果它是必填字段,我宁愿先使用它,而不是名/姓。看起来你要做的是识别一个逻辑键,在这个逻辑键上你可以识别一个特定的人。即使是第一个/最后一个名字也很少足够。你有罗伯·史密斯,可能是罗伯特·史密斯或小罗伯特·史密斯。。电子邮件似乎更细粒度,因为域通常不允许重复!例如,您可以将group by与rollup一起使用。。。从表组中按FName、Lname、Email选择FName、Lname、count*,汇总为count*=1Email的Email可能是一个不好的示例。如果我们得到的只是一个名字、姓氏、街道名称、街道号码、城市等等,那么任何一个输入错误都意味着我们无法匹配。此外,用户可能会决定使用一个虚拟电子邮件地址。我想我一读就不理解这个问题。如果另一个约翰·史密斯使用你的系统呢?根据你的逻辑,你不知道是不是同一个人。您需要一个唯一的个人标识符,并且名字+姓氏不是唯一的。电子邮件是一个不错的选择,当然是为了防止某人意外或故意进入他人的电子邮件。大多数网站在处理用户输入时都是这样操作的;我建议你也采用这种方式。这是一个在线提交表单,供人们承诺不允许登录系统的用户使用,我们的数据库中可能有也可能没有他们的记录。我们需要某种匹配策略,检查是否找到了一个人,在查询过程中,阶段会变得越来越复杂。名字,姓氏是一个简化的例子。人们不会知道他们的唯一id,所以他们不能仅仅使用它。