【发布时间】:2023-03-22 07:31:01
【问题描述】:
我有三张桌子:
user: id, name
keyword: id, name
userkeyword: id, user_id, keyword_id
我想通过以下方式执行查询:
显示关键字与登录用户匹配的用户 关键词。按关键字匹配用户的最大数量排序 应该首先显示
e.g : 如果 userA 有 4 个匹配的关键字,userB 有 8 个,userC 有 1 个,userD 有 6 个,那么结果的顺序应该是,
userB
userD
userA
userC
为此我已经完成了这个查询(假设登录用户的 id 是 1):
select *
from user
where id IN (
select user_id
from userkeywords
where keyword_id IN (
select keyword_id
from userkeywords
where user_id=1)
group by user_id
order by count(keyword_id) desc)
AND id != 1
这里的结果越来越完美,但顺序不正确。我以以下方式合并了两个查询”
select *
from user
where id IN (?)
AND id!=1
+
select user_id
from userkeywords
where keyword_id IN (
select keyword_id
from userkeywords
where user_id=1)
group by user_id
order by count(keyword_id) desc
第二个查询以正确的顺序返回user_id,但是当我合并两个查询时,顺序发生了变化(错误)。
希望我已经足够详细地正确提及了我的查询。
【问题讨论】:
-
@Strawberry:看起来我们的编辑有冲突,认为我的编辑更彻底,所以回滚了
-
如果您愿意,请考虑遵循以下简单的两步操作: 1. 如果您还没有这样做(您还没有这样做),请提供适当的 DDL(和/或 sqlfiddle),以便我们可以更容易地复制问题。 2. 如果您还没有这样做(同样,您还没有这样做),请提供与步骤 1 中提供的信息相对应的所需结果集。
标签: mysql sql subquery sql-order-by