gpt4 book ai didi

Mysql根据当前用户与搜索用户的好友状态进行选择

转载 作者:行者123 更新时间:2023-11-30 01:03:06 26 4
gpt4 key购买 nike

sql fiddle :http://www.sqlfiddle.com/#!2/60689e/12

目前的查询如下所示:

SELECT DISTINCT u.name_surname, u.avatar, u.location
FROM users AS u
JOIN connections AS c ON c.user_id = u.id
JOIN words_en AS w ON w.id = c.word_id
WHERE (w.word = :kwd
OR u.location = :kwd
OR u.name_surname = :kwd)
AND u.privacy > 0
AND c.deleted <> 1

这是一个针对用户的搜索查询,它会查看位置名称_姓氏和单词,并显示在这些列中的任何位置拥有此关键字的用户。

我想以某种方式将当前用户和搜索用户关系合并到此查询中。

u.privacy 可以是 0,2,3。 0 表示私有(private),并且在搜索结果中被忽略。 2 仅限好友。 3 是所有人。我很难将这个隐私= 2 部分纳入其中。因此,如果找到的用户隐私设置为 2,那么我必须比较他们的关系,如果他们是 friend ,则显示搜索到的用户,如果不是,则不显示他。

关系以双向流的形式存储在好友表中。

这是我用来选择 person1 的所有 friend 的查询:

SELECT GROUP_CONCAT(f1.asked_user_id) AS friend_id
FROM friends AS f1 JOIN friends AS f2
ON f1.asked_user_id = f2.asker_user_id
AND f1.asker_user_id = f2.asked_user_id
WHERE f1.status = 1 AND f2.status = 1
AND f1.asker_user_id = :person1

任何帮助表示赞赏!谢谢!

更新

SELECT (u.id) as uuid, u.avatar, u.location, u.name_surname,
MAX(CONCAT_WS(", ",
CASE WHEN w.word = :kwd THEN "words list" END,
CASE WHEN u.location = :kwd THEN "location" END,
CASE WHEN u.name_surname = :kwd THEN "name" END)) As matched
FROM users AS u
JOIN connections AS c
ON c.user_id = u.id
JOIN words_en AS w
ON w.id = c.word_id
LEFT JOIN friends AS f1
ON f1.asker_user_id = :user_id
AND f1.status = 1
AND f1.asked_user_id = u.id
WHERE (w.word = :kwd
OR u.location = :kwd
OR u.name_surname = :kwd)
AND (u.privacy = 3 OR (u.privacy = 2 and f1.id IS NOT NULL))
AND c.deleted <> 1
GROUP BY u.id
ORDER BY matched DESC

此查询有效,但如果用户在连接中根本没有单词,即使位置选择中匹配为正,也不会返回任何内容。

最佳答案

您需要在 SQLFiddle 中加载更好的数据。所有用户的隐私设置为 0。此外,加载数据后,请让我知道 person1 和 kwd 的值需要是什么才能在示例数据中获取结果

更改为考虑无单词/连接

SELECT DISTINCT u.name_surname, u.avatar, u.location
FROM users AS u
LEFT JOIN connections AS c
ON c.user_id = u.id
AND c.deleted <> 1
LEFT JOIN words_en AS w
ON w.id = c.word_id
LEFT JOIN friends AS f1
ON f1.asker_user_id = :person1
AND f1.status=1
AND f1.asked_user_id = u.uid
WHERE (w.word = :kwd
OR u.location = :kwd
OR u.name_surname = :kwd)
AND (u.privacy=3 OR (u.privacy=2 and f1.id IS NOT NULL))

关于Mysql根据当前用户与搜索用户的好友状态进行选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19938155/

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