按位置排序mysql查询结果

svujldwt  于 2021-06-15  发布在  Mysql
关注(0)|答案(2)|浏览(279)

我有一个搜索栏来搜索其他用户的名字或用户名,这很容易做到,但我想做的是,如果有更多的一个用户有相同的名字,你正在搜索我想显示第一个最接近你的人,这样第一个将出现与该名称的用户谁是在同一个城市的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

然后我把这三个查询的结果结合起来。

wxclj1h5

wxclj1h51#

从当前查询(调用« 其他 » 在下面的sql中,您希望加入与当前用户(调用« 我 ») 然后使用特殊的ORDERBY子句,首先使用case构造显示最接近的匹配记录。
这是假设« 用户名 » 可用于唯一标识当前用户。

SELECT 
        other.username
    FROM userrating other
    INNER JOIN userrating me on me.username = 'bar'
    WHERE 
       CONCAT (other.FNAME, " ", other.LNAME) like '%Searched Name%'
    ORDER BY
    CASE
        WHEN other.cityid = me.cityid THEN 0
        WHEN other.countryid = me.countryid THEN 1
        ELSE 2
    END,
    other.username

你需要用当前用户名替换“bar”。

jjhzyzn0

jjhzyzn02#

仅用一个查询很难做到这一点,但您可以这样做:

SELECT * FROM users WHERE username LIKE '%searchkey%' OR fname LIKE '%searchkey%' OR lname LIKE '%searchkey%' OR countryid LIKE '%searchkey%' OR cityid LIKE '%searchkey%'

在这里你可以阅读更多关于 LIKE 接线员。

相关问题