我的 table 是这个:
name email password
amit <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="4425292d04236a272b29" rel="noreferrer noopener nofollow">[email protected]</a> yadav
yadav <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="91e8f0f5f0e7d1f7bff2fefc" rel="noreferrer noopener nofollow">[email protected]</a> yadav
我的程序是这个
ALTER proc [dbo].[prcAdvanceSearchUser]
@username varchar(50)
as
begin
select *
from userdetails
where (vname like @username + '%'
or vemail like @username + '%'
or vpassword like @username +'%')
end
每当我搜索名为 yadav 的成员时...它会在顶部显示 amit,因为 amit 的密码=yadav ....
现在我的观点是......我的结果应该首先根据姓名显示,然后通过电子邮件显示,然后通过密码或城市(无论列名称是什么)显示..
有没有可能的方法进行这种搜索??????
最佳答案
通过根据 tag
列排序,成功匹配 vname
后返回的所有行都以 tag value = 1 的形式出现在顶部,然后按排序顺序出现 tag value= 2 表示所有这些行均成功与 vemail
匹配,依此类推
ALTER proc [dbo].[prcAdvanceSearchUser] @username varchar(50)
as
begin
select *,1 as tag from userdetails
where vname like @username + '%'
Union
select *,2 as tag from userdetails
where vemail like @username + '%'
Union
select *,3 as tag from userdetails
where vpassword like @username +'%'
order by tag
end
关于sql - 在 sql 中从同一个表搜索两次总是返回排名较高的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22506150/