gpt4 book ai didi

sql - 每个标准的限制

转载 作者:可可西里 更新时间:2023-11-01 07:50:47 27 4
gpt4 key购买 nike

我有一个文章表和一个类别表。我想为每个类别获取 7 篇文章。目前我有这个,但在大 table 上速度很慢,所以它不是真正的解决方案:

SELECT id, 
title,
categories_id,
body,
DATE_FORMAT(pubdate, "%d/%m/%y %H:%i") as pubdate
FROM articles AS t
WHERE (
SELECT COUNT(*)
FROM articles
WHERE t.categories_id = categories_id
AND id< t.id AND publish = 1
AND expires > '2008-12-14 18:38:02'
AND pubdate <= '2008-12-14 18:38:02'
) < 7
ORDER BY categories_id DESC

使用 explain,它向我展示了它正在执行一个连接类型 ALL & REF。选择类型是 PRIMARY 和 DEPENDENT SUBQUERY。

有没有更好的解决方案?

最佳答案

这是我解决这个问题的方法:

SELECT a1.id, 
a1.title,
a1.categories_id,
a1.body,
DATE_FORMAT(a1.pubdate, "%d/%m/%y %H:%i") as pubdate
FROM articles AS a1
LEFT OUTER JOIN articles AS a2
ON (a1.categories_id = a2.categories_id AND
(a1.pubdate < a2.pubdate OR (a1.pubdate = a2.pubdate AND a1.id < a2.id)))
GROUP BY a1.id
HAVING COUNT(*) < 7;

相关子查询通常性能不佳,因此该技术改用连接。

对于给定的文章,搜索与正在考虑的当前文章 (a1) 的类别相匹配的文章 (a2),并且具有更近的日期(或更高的 id,如果是领带)。如果符合该标准的文章少于七篇,则当前一篇必须是其类别中最新的一篇。

如果您可以依赖与 pubdate 具有相同排序顺序的唯一 id 列,那么您可以简化连接,因为唯一列上没有关系:

  ON (a1.categories_id = a2.categories_id AND a1.id < a2.id)

关于sql - 每个标准的限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/366915/

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