MYSQL与极限一起分组

时间:2014-03-13 09:18:25

标签: mysql

您好我使用以下查询

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

生成以下

enter image description here
我希望结果每月仅显示5个结果

1 个答案:

答案 0 :(得分:0)

没有简单的(SQL)方式。您可以使用多个查询来执行此操作,每个查询都有一个限制,或者您可以执行整个查询,获取所有ID和月份,对数组进行排序,然后返回以按ID获取实际行 - 良好的解决方案取决于几个的东西。

一个非常简单的情况是,你只有2-3个月的时间来展望未来,在这种情况下,实际上没有什么能够超过2-3个单独的查询。此外,如果您只有几(1-2000)行,则单独的查询甚至会持续更长时间 - 因为即使在第一次查询之后,MySQL也可能保持整个表的缓存。

如果你有大约10,000行,PHP提取排序将是最好的。如果您的行很慢(例如,由于连接),那么您只需要获取它们一次,然后从PHP(或者您要查询的任何内容)执行其余操作,这是一个好处。

超过500.000,数组开始溢出内存,因此您可能需要tmp表或tmp文件来保存行。如果你做得对,它仍然很快。

现在,如果你有超过一百万行,并且你仍然希望每月只选择5行,那么还会有很多其他因素,所以我只会在必要时描述这种情况。

(那么,也许有一些关于MySQL的东西,我不知道并解决了你的问题......)