Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.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
SQL:在已经有一场比赛的情况下抢两场?_Sql - Fatal编程技术网

SQL:在已经有一场比赛的情况下抢两场?

SQL:在已经有一场比赛的情况下抢两场?,sql,Sql,对于我的邮件系统中的收件人字段,如果您输入Megan Fo,它将询问您“您是指Megan Fox吗?”。然后我还有一个“你是说谁?梅根·福克斯,梅根·福克斯,梅根·福克斯谢”如果发现不止一个 当然,如果你做对了,也会有。(如果此SQL语句仅返回1,且完整值为1) 这是工作良好,虽然现在我有一个问题,当我试图发送给用户 “梅格梅格” 然后返回2,“梅格·梅格”和“梅根·福克斯”。我希望它返回一个,只有当它匹配完整的。所以现在我不断地得到“你指的是谁?”当我建立它时,所以如果超过1行数,那么“你指的

对于我的邮件系统中的收件人字段,如果您输入Megan Fo,它将询问您“您是指Megan Fox吗?”。然后我还有一个“你是说谁?梅根·福克斯,梅根·福克斯,梅根·福克斯谢”如果发现不止一个

当然,如果你做对了,也会有。(如果此SQL语句仅返回1,且完整值为1)

这是工作良好,虽然现在我有一个问题,当我试图发送给用户

“梅格梅格”

然后返回2,“梅格·梅格”和“梅根·福克斯”。我希望它返回一个,只有当它匹配完整的。所以现在我不断地得到“你指的是谁?”当我建立它时,所以如果超过1行数,那么“你指的是谁…”


如何修复此问题?

这会稍微慢一点,但您可以将逻辑分为两个查询,一个使用精确匹配(
=
,而不是像
那样的
),如果该查询不产生任何结果,则运行当前查询


然而,当用户输入Megan Fox时,这会产生问题,实际上是指Megan Foxy。

在SQL语句的末尾,似乎包含了每个名字以“Meg”开头的人,这就是Meg Meg和Megan Fox都匹配的原因。尝试将WHERE子句缩短为:

    WHERE users_friends.bID='1' AND users_friends.type = 'friend' AND users_friends.accepted = '1' AND (
(users.firstname = 'Meg' AND users.lastname='Meg') OR
(users.firstname LIKE 'Meg%' AND users.lastname LIKE 'Meg%')) 

据我所知,这是您使用“Meg Meg”时的问题。…
-您的代码与“Meg Meg”完全匹配
-您的代码还标识与“Megan Fox”的部分匹配
-如果获得了精确匹配,则不希望包含部分匹配

这里的问题是,返回集中没有一条记录“知道”其他记录

要知道您不想包含部分匹配,您必须已经完成了精确匹配的完整检查

对我来说有两种方法


1)连续但独立的查询…

让您的客户运行精确匹配的查询

如果没有返回任何记录,请运行查询,查找名字和姓氏的部分匹配项

如果没有返回任何记录,请运行查询以查找与名字或姓氏的部分匹配

等等等等


2。在指定匹配类型的位置运行一个查询

向查询中添加如下字段

CASE WHEN (users.firstname = 'Meg' AND users.lastname='Meg')           THEN 1
     WHEN (users.firstname LIKE 'Meg%' AND users.lastname LIKE 'Meg%') THEN 2
     WHEN (users.firstname LIKE 'Meg%' OR users.lastname LIKE 'Meg%')  THEN 3
END AS 'match_type'
然后还将其添加到ORDERBY子句中,以便在顶部进行完全匹配,等等

然后,您的客户可以查看生成的每种匹配类型的数量,并选择放弃/忽略不相关的匹配

    WHERE users_friends.bID='1' AND users_friends.type = 'friend' AND users_friends.accepted = '1' AND (
(users.firstname = 'Meg' AND users.lastname='Meg') OR
(users.firstname LIKE 'Meg%' AND users.lastname LIKE 'Meg%')) 
CASE WHEN (users.firstname = 'Meg' AND users.lastname='Meg')           THEN 1
     WHEN (users.firstname LIKE 'Meg%' AND users.lastname LIKE 'Meg%') THEN 2
     WHEN (users.firstname LIKE 'Meg%' OR users.lastname LIKE 'Meg%')  THEN 3
END AS 'match_type'