Php 搜索用户并首先返回好友(订单)

Php 搜索用户并首先返回好友(订单),php,sql,Php,Sql,我使用以下查询从“users”表中选择登录用户会话id为$uid的用户: SELECT first_name, last_name, uid, hometown from users where concat(first_name,' ',last_name) like '%$q%' and uid <> $uid LIMIT 6 我的问题是,我将如何在朋友的用户处于顶端的情况下订购这样的查询?例如,如果我的用户搜索“Dave”,我返回5个名字为Dave的人,我如何将他的朋友Da

我使用以下查询从“users”表中选择登录用户会话id为$uid的用户:

SELECT first_name, last_name, uid, hometown from users  where concat(first_name,' ',last_name) like '%$q%' and uid <> $uid LIMIT 6
我的问题是,我将如何在朋友的用户处于顶端的情况下订购这样的查询?例如,如果我的用户搜索“Dave”,我返回5个名字为Dave的人,我如何将他的朋友Dave排在所有其他Dave的前面,并以这种方式排序查询


谢谢您的帮助。

我最好的办法是在数据库中设置一个“排名”,并为您首先要订购的人指定一个值1

SELECT `fields` FROM `table` ORDER BY `rank` DESC
试试这个:

SELECT
    a.first_name,
    a.last_name,
    a.uid,
    a.hometown,
    IF(b.friend_two IS NULL, 0, 1) AS isFriend
FROM
    users a
LEFT JOIN
    friends b ON a.uid = b.friend_two AND b.friend_one = $uid
WHERE
    CONCAT(a.first_name, ' ', a.last_name) LIKE '%q%'
    AND a.uid <> $uid
ORDER BY
    isFriend DESC
选择
a、 名字,
a、 姓,
a、 uid,
a、 家乡,
如果(b.friend\u two为NULL,0,1)作为isFriend
从…起
用户a
左连接
a.uid=b.friends\u二和b.friends\u一上的朋友b=$uid
哪里
CONCAT(一个名字,,,一个姓氏)像“%q%”
和a.uid$uid
订购人
isFriend DESC

在“朋友”表中,每个关系的表中是否始终有两行?i、 (5->9),(9->5)或者它只是一行,uid在任一列中?我使用的是两行系统,所以(5->9),(9->5)。事实上,
CONCAT()
=)也是如此,或者完全省略
IF
并使用
b。friend\u two与isFriend一样不是空的
SELECT
    a.first_name,
    a.last_name,
    a.uid,
    a.hometown,
    IF(b.friend_two IS NULL, 0, 1) AS isFriend
FROM
    users a
LEFT JOIN
    friends b ON a.uid = b.friend_two AND b.friend_one = $uid
WHERE
    CONCAT(a.first_name, ' ', a.last_name) LIKE '%q%'
    AND a.uid <> $uid
ORDER BY
    isFriend DESC