sql - 在 sql 中从同一个表搜索两次总是返回排名较高的值

标签 sql sql-server

我的 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/

相关文章:

mysql - 计算具体值。 mysql

SQL Server - 如何创建 IF EXISTS...SELECT AND SELECT

内部连接查询中的 MySQL COALESCE?

sql-server - 如何合并两行并对 UPDATE 中的某些列求和?

sql - 在SQL Server中使用IF语句的表值函数

SQL left 2 或 Convert(varchar(2) ,'Chgffgjjx' ) 哪个更快

MySql - 如何组合两个表的 where 子句以进行一对多连接?

sql - 如何防止 SQL 语法中排序规则影响表名?

sql-server - 更改表中的列顺序时出现问题 (SQL Server 2008)

c# - Xamarin Android 和 Azure SQL