gpt4 book ai didi

mysql - 在查询和 LIMIT 之后应用 ORDER BY

转载 作者:可可西里 更新时间:2023-11-01 07:06:18 25 4
gpt4 key购买 nike

找到了类似的帖子但仍然卡住 - 我正在尝试在处理查询并限制结果后应用排序。我的代码是

select DISTINCT(t.id) t_id, t.cart_id ,tS.id tS_id, tS.created tS_created, t.value, t.transactionType_id tT_id, tS.member_name, outIn, tT.type type

from(transaction t)
join transactionSummary tS ON tS.id = t.transactionSummary_id
left join transactionType tT ON tT.id = t.transactionType_id
order by t.id DESC
limit 50

我曾尝试进行子选择并在之后应用 ORDER BY,但收到一条错误消息,指出“字段列表”中的未知列“t.id”。

上面的代码(即没有子选择)工作正常,但 ORDER BY 减慢了它的速度,因为表很大......有什么建议吗?

最佳答案

由于您将 t.id 别名为 t_id,因此您需要在外部查询中使用别名。

SELECT *
FROM (select DISTINCT t.id t_id, t.cart_id ,tS.id tS_id, tS.created tS_created, t.value, t.transactionType_id tT_id, tS.member_name, outIn, tT.type type

from transaction t
join transactionSummary tS ON tS.id = t.transactionSummary_id
left join transactionType tT ON tT.id = t.transactionType_id
limit 50) x
ORDER BY t_id DESC

顺便说一句,您编写 DISTINCT(t.id) 的方式表明您认为 distinct 操作仅应用于该列。 DISTINCT 适用于整个 SELECT 列表;如果您只想使某些列不同,则必须使用 GROUP BY 来指定这些列。

这里有一种重写查询的可能方法,可以使它更快:

select DISTINCT t.id t_id, t.cart_id ,tS.id tS_id, tS.created tS_created, t.value, t.transactionType_id tT_id, tS.member_name, outIn, tT.type type
from transaction t
join (select max(id)-500 maxid from transaction) mT on t.id > maxid
join transactionSummary tS ON tS.id = t.transactionSummary_id
left join transactionType tT ON tT.id = t.transactionType_id
order by t_id DESC
limit 50

通过向下过滤到前 500 个 ID,连接和排序的大小减少了。

关于mysql - 在查询和 LIMIT 之后应用 ORDER BY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19451273/

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