我有一个搜索栏来搜索其他用户的名字或用户名,这很容易做到,但我想做的是,如果有更多的一个用户有相同的名字,你正在搜索我想显示第一个最接近你的人,这样第一个将出现与该名称的用户谁是在同一个城市的u,然后在同一个国家,然后,在世界其他地方,我可以用多个查询来获得所需的结果,但是用一个查询就可以了吗?
注意:我用于搜索的用户表包含 Username
, FName
, LName
, CountryCode
, CityID
.
以下是我现在使用的查询:
Select user.USERNAME, AVG(userrating.RATING) as Avg_Rating
from user LEFT JOIN userrating on user.USERNAME = userrating.USERNAME
WHERE CONCAT (user.FNAME, " ", user.LNAME) like '%Searched Name%' and user.CITYID = User's_City_ID
GROUP by user.USERNAME
ORDER by Avg_Rating
然后,我使用相同的查询,但针对用户的国家/地区,不包括以前使用的城市:
Select user.USERNAME, AVG(userrating.RATING) as Avg_Rating
from user LEFT JOIN userrating on user.USERNAME = userrating.USERNAME
WHERE CONCAT (user.FNAME, " ", user.LNAME) like '%Searched Name%' and user.CountryCode = User's_Country_Code and not user.CITYID = User's_City_ID
GROUP by user.USERNAME
ORDER by Avg_Rating
同样的,但不包括我在上一篇文章中使用的整个国家。查询:
Select user.USERNAME, AVG(userrating.RATING) as Avg_Rating
from user LEFT JOIN userrating on user.USERNAME = userrating.USERNAME
WHERE CONCAT (user.FNAME, " ", user.LNAME) like '%Searched Name%' and not user.CountryCode = User's_Country_Code
GROUP by user.USERNAME
ORDER by Avg_Rating
然后我把这三个查询的结果结合起来。
2条答案
按热度按时间wxclj1h51#
从当前查询(调用« 其他 » 在下面的sql中,您希望加入与当前用户(调用« 我 ») 然后使用特殊的ORDERBY子句,首先使用case构造显示最接近的匹配记录。
这是假设« 用户名 » 可用于唯一标识当前用户。
你需要用当前用户名替换“bar”。
jjhzyzn02#
仅用一个查询很难做到这一点,但您可以这样做:
在这里你可以阅读更多关于
LIKE
接线员。