gpt4 book ai didi

MySQL搜索用户, friend 优先

转载 作者:行者123 更新时间:2023-11-29 02:30:54 28 4
gpt4 key购买 nike

  • 我有一个功能可以在我的网站上搜索用户,
  • 我的网站上还有一个面向 friend 的功能。
  • 我有一个查询要在我的网站上搜索正确的用户,并且
  • 我有一个查询可以确定用户的 friend ,他们都按应有的方式工作,

所以我需要帮助的是将两者结合起来,在其他用户之前订购 friend 。

搜索查询:

SELECT userID, fname, lname, 
FROM names
WHERE (
fname LIKE '".$term."%'
OR lname LIKE '".$term."%'
OR CONCAT(fname, ' ', lname) LIKE '".$term."%'
)
AND userID!=$session
ORDER BY fname ASC, lname ASC
LIMIT 10

好友查询:

SELECT CASE WHEN userID=$session 
THEN userID2
ELSE userID
END AS friendID
FROM friends
WHERE (
userID=$session
OR userID2=$session
)
AND state='1'

因此,比较两者的语句应该类似于 IF names.userID=friends.friendID

现在我在 stackoverflow 上发现了一个用户对类似问题的建议,这似乎是一种简单的方法,但是我不完全确定如何将它添加到我的特定 friend 查询中,因为它更像是一个复杂查询。

SELECT
posting.id,
IF(a.friend_id = b.criteria, 1, 0) AS is_friend
...
ORDER BY is_friend DESC, posting.id DESC

最佳答案

使用外部联接(左联接)将第一个查询返回的用户列表与第二个查询生成的好友列表联接起来。现在您将能够根据第二行集是否匹配这一事实进行排序:如果匹配,则相应的行应该排在第一位。

这是您如何实现上述内容的示例:

SELECT
n.userID,
n.fname,
n.lname
FROM names n
LEFT JOIN (
SELECT CASE WHEN userID=$session
THEN userID2
ELSE userID
END AS friendID
FROM friends
WHERE (
userID=$session
OR userID2=$session
)
AND state='1'
) f
ON n.userID = f.friendID
WHERE (
n.fname LIKE '".$term."%'
OR n.lname LIKE '".$term."%'
OR CONCAT(n.fname, ' ', n.lname) LIKE '".$term."%'
)
AND n.userID!=$session
ORDER BY (f.friendID IS NULL), n.fname ASC, n.lname ASC
LIMIT 10

第一个排序标准 (f.friendID IS NULL) 如果存在匹配的 f 行,则评估为 false,即如果用户是 friend ,否则为 true。因此,由于 false 排在 true 之前, friend 将排在非 friend 之前。

关于MySQL搜索用户, friend 优先,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13338840/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com