gpt4 book ai didi

mysql - 子查询 - 记录不是有序的

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

我有三个表:

user: id, name
keyword: id, name
userkeyword: id, user_id, keyword_id

我想按以下方式执行查询:

Display those users whose keyword/s are matched with the login user's keywords. In the order of maximum number of keyword matched user should display first

例如:如果用户 A 有 4 个匹配的关键字,用户 B 有 8 个,用户 C 有 1 个,用户 D 有 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 但当我合并两个查询时,顺序被更改(错误)。

希望我已经足够详细地恰本地提到了我的查询。

最佳答案

子查询返回一个无序集,因此子查询中的order by 仅与其limit 子句有关(如果有的话)。 MySQL 以外的任何数据库都会为纯装饰性排序顺序提供错误消息。

无法对仅存在于 where 子句中的列进行排序。您必须重写查询。一种选择是将 in 条件替换为 joins:

select  uk2.name
from userkeywords uk1
join userkeywords uk2
on uk1.keyword_id = uk2.keyword_id
and uk1.user_id <> uk2.user_id
join user u2
on u2.id = uk2.user_id
where uk1.user_id = 1
group by
uk2.name
order by
count(*) desc

关于mysql - 子查询 - 记录不是有序的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28693437/

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