gpt4 book ai didi

sql - 如何重写以下 mysql 查询

转载 作者:行者123 更新时间:2023-11-29 15:08:23 24 4
gpt4 key购买 nike

我有一个文件上传网站,我想运行一个每天运行的维护脚本,并删除一周内未访问过的项目。我将每天的 View 和每个项目记录到表中:

  • hit_itemid
  • hit_date
  • hit_views

主表实际上包含已上传的文件,就本示例而言,它只是此表中的 vid_idvid_title 以及 vid_id 将等于 hit_itemid

我有一个查询如下:

 SELECT vid_id, 
vid_title,
SUM(case when hit_date >= '2009-09-17' then hit_hits else 0 end) as total_hits
FROM videos
LEFT JOIN daily_hits ON vid_id = hit_itemid
WHERE vid_posttime <= '$last_week_timestamp' AND vid_status != 3
GROUP BY hit_itemid
HAVING total_hits < 1

但这总是返回一条记录。

如何重写此查询?

最佳答案

一个想法:

SELECT DISTINCT
vid_id, vid_title
FROM
videos v
LEFT JOIN daily_hits dh ON (
v.vid_id = dh.hit_itemid AND dh.hit_date >= '2009-09-17'
)
WHERE
v.vid_posttime <= '$last_week_timestamp' AND v.vid_status != 3
AND dh.hit_itemid IS NULL;

或者(基准测试看看哪个更快):

SELECT
vid_id, vid_title
FROM
videos v
WHERE
v.vid_posttime <= '$last_week_timestamp' AND v.vid_status != 3
AND NOT EXISTS (
SELECT 1 FROM daily_hits dh
WHERE v.vid_id = dh.hit_itemid AND dh.hit_date >= '2009-09-17'
)

我猜第一种形式会更快,但无法检查(我不有权访问您的数据)。也没有测试过这些查询同样的原因。

关于sql - 如何重写以下 mysql 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1474414/

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