您好我使用以下查询
SELECT
FROM_UNIXTIME(
results.date_searched,
'%M %Y'
) AS mon,
results.region AS region,
results.country AS country,
results.resort AS resort,
Count(results.region) AS num
FROM
home_monthly_cached_data
RIGHT JOIN results ON home_monthly_cached_data.`month` = FROM_UNIXTIME(
results.date_searched,
'%M/%Y'
)
WHERE
results.region != 'Not Available'
AND results.region != ''
AND results.country != ''
AND results.country != 'Turkey'
GROUP BY
results.region
ORDER BY
mon,
COUNT(*) DESC
生成以下
我希望结果每月仅显示5个结果
答案 0 :(得分:0)
没有简单的(SQL)方式。您可以使用多个查询来执行此操作,每个查询都有一个限制,或者您可以执行整个查询,获取所有ID和月份,对数组进行排序,然后返回以按ID获取实际行 - 良好的解决方案取决于几个的东西。
一个非常简单的情况是,你只有2-3个月的时间来展望未来,在这种情况下,实际上没有什么能够超过2-3个单独的查询。此外,如果您只有几(1-2000)行,则单独的查询甚至会持续更长时间 - 因为即使在第一次查询之后,MySQL也可能保持整个表的缓存。
如果你有大约10,000行,PHP提取排序将是最好的。如果您的行很慢(例如,由于连接),那么您只需要获取它们一次,然后从PHP(或者您要查询的任何内容)执行其余操作,这是一个好处。
超过500.000,数组开始溢出内存,因此您可能需要tmp表或tmp文件来保存行。如果你做得对,它仍然很快。
现在,如果你有超过一百万行,并且你仍然希望每月只选择5行,那么还会有很多其他因素,所以我只会在必要时描述这种情况。
(那么,也许有一些关于MySQL的东西,我不知道并解决了你的问题......)