替代此查询

时间:2017-01-29 11:31:04

标签: php mysql database

我希望获取数据库中过去一天,一周或一个月内浏览次数最多的所有文章。

这就是我使用这些查询的原因(我使用第一个查询的结果来创建最后一个)

SELECT guid
FROM tracking
WHERE date > UNIX_TIMESTAMP(NOW() - INTERVAL 1 MONTH)
GROUP BY guid
ORDER BY count(guid) DESC limit 1,10 

SELECT *
FROM `items`
WHERE `id` IN('66', '37', '42', '50', '55', '38',   '41', '65', '71', '44') AND `type` = 'ddl'
ORDER BY FIELD(id, 66, 37, 42, 50, 55, 38, 41, 65, 71, 44)

还有另一种方法可以非常快速地获得相同的结果吗?目前,跟踪表中只有45条记录的响应时间为0.4530毫秒。物品表上有36条记录。

EXPLAIN

enter image description here

1 个答案:

答案 0 :(得分:0)

假设您想根据第二个查询中的计数保留订单,您可以使用JOIN将这两个结合起来:

SELECT 
    a.*
FROM
    `items` a
        INNER JOIN
    (SELECT 
        guid, COUNT(guid) cnt
    FROM
        tracking
    WHERE
        date > UNIX_TIMESTAMP(NOW() - INTERVAL 1 MONTH)
    GROUP BY guid
    ORDER BY COUNT(guid) DESC
    LIMIT 1 , 10) b ON a.`id` = b.guid
WHERE
    a.`type` = 'ddl'
ORDER BY b.cnt DESC;