gpt4 book ai didi

mysql - 组合 2 个表,但首先显示选定的行,然后按随机顺序显示其余行

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

我有 2 个表,分别是 tropies_list 和 tropies_won。我想首先列出所有已赢得的奖杯,然后按随机顺序列出所有尚未赢得的奖杯。我到处寻找,但没有成功。

我的 table ...

赢得的奖杯:

trophy_id
获胜者_id

奖杯列表:

trophy_id
奖杯名称

为了澄清,我希望列出所有奖杯,但首先显示“tropies_won”中出现的奖杯以及所选的“winners_id”,然后按随机顺序显示其余奖杯。

最佳答案

您需要一个 outer join .

如果您不关心“赢得”奖杯的出现顺序,您可以非常简单地执行以下操作(因为对于那些奖杯,winner_id 将为 NULL尚未赢得的奖杯和 NULL is ordered "after" all other results in a descending order ):

SELECT * FROM
trophies_list
NATURAL LEFT JOIN trophies_won
ORDER BY winner_id DESC, RAND();

当然,如果你说“所有未赢得的奖杯应该是随机顺序”,你的意思是你只是不关心顺序,你可以省略后面的“, RAND( )”。

<小时/>

更新

针对您的评论,我认为您实际上正在寻找更像这样的东西:

SELECT trophies_list.*, NOT ISNULL(trophies_won.winner_id) AS won FROM
trophies_list
LEFT JOIN trophies_won ON (
trophies_won.trophy_id = trophies_list.trophy_id
AND trophies_won.winner_id = 43
)
ORDER BY won DESC, RAND();

通过对您所追求的条件执行外连接ON,您可以在所有奖杯列表中识别出符合该条件和不符合该条件的奖杯。在本例中,指定的获胜者赢得了哪些奖杯,哪些没有赢得。

ORDER BY 子句确保结果按已赢得的奖杯首先出现,然后是未赢得的奖杯排序;在这些层中,顺序是随机的(同样,如果您根本不关心顺序,则可以删除 , RAND() 部分,这会增加不必要的开销)。

关于mysql - 组合 2 个表,但首先显示选定的行,然后按随机顺序显示其余行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10273191/

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