为了拥有models
表的趋势列表,我使用了一个查询,该查询将过去30天内model_id
表中medias
的出现次数分组。
SELECT models.*,medias.model_id, COUNT(model_id) AS OCCURENCE
FROM medias
JOIN models ON models.id = medias.model_id
WHERE medias.date > DATE_SUB(CURDATE(), INTERVAL 30 DAY)
GROUP BY medias.model_id
ORDER BY OCCURENCE DESC
LIMIT '.$limit.' OFFSET '.$offset
但是,在这个查询中,我想找到一种方法来添加models
表的其余部分,它将返回过去30天的趋势列表,然后是所有时间的趋势列表
WHERE medias.date > DATE_SUB(CURDATE(), INTERVAL 30 DAY) ---> Then Infinite
答案 0 :(得分:0)
我并不完全了解您要实现的目标,但听起来您希望在现有查询的基础上进行构建,该查询会在过去30天内按发生情况列出数据,方法是添加另一组结果没约会。
在this SQLFiddle中可以看到以下查询。小提琴使用任意数据集,因为你没有详细说明。
SELECT
models.*,medias.model_id, COUNT(model_id) AS occurance, 1 as orderfield
FROM medias
JOIN models ON models.id = medias.model_id
WHERE medias.date > DATE_SUB(CURDATE(), INTERVAL 30 DAY)
GROUP BY medias.model_id
UNION
SELECT
models.*,medias.model_id, COUNT(model_id) AS occurance, 2 as orderfield
FROM medias
JOIN models ON models.id = medias.model_id
GROUP BY medias.model_id
ORDER BY orderfield, occurance DESC;
这将遵循原始查询,其结果集如上所述。我在每个查询中都使用了一个标识符,这样它们就可以先订购“30天”的结果,这只是一种快速而又脏的方法。
如果您希望第二组不包含第一组中的数据,您只需要在第二个查询中使用此where
子句:
WHERE medias.date <= DATE_SUB(CURDATE(), INTERVAL 30 DAY)
如this fiddle所示。
显然你必须重新设置你的php值来限制/抵消结果 - 我把它们留给了演示目的。
如果这不是您要实现的目标,您可能需要将问题编辑为更具体。