我正在创建一个排行榜,并希望在“接近”的客户端实时更新结果。
我的桌子是这样的:
╔════╦═════════════════╦════════════╦════════╗
║ id ║ author ║topic ║ count ║
╠════╬═════════════════╬════════════╬════════╣
║ 1 ║ jazzgarza ║ nowplaying ║ 1 ║
║ 2 ║ DJBure ║ nowplaying ║ 16 ║
║ 3 ║ GRC__romoly ║ nowplaying ║ 5 ║
║ 4 ║ MarineBerteloot ║ wtf ║ 1 ║
║ 5 ║ Nick_Lukitsh ║ nowplaying ║ 1 ║
║ 6 ║ Mugen__ ║ nowplaying ║ 2 ║
║ 7 ║ MaxChebotarev ║ nowplaying ║ 6 ║
║ 8 ║ radeonvelcro ║ nowplaying ║ 9 ║
║ 9 ║ SF1033 ║ nowplaying ║ 102 ║
╚════╩═════════════════╩════════════╩════════╝
我基本上希望能够检索到给定主题的n行中计数最高的行。
我想对每个主题都这样做,n可能会根据主题而改变。
目前,我有一个简单的dumb sql查询,我定期运行(每秒钟左右,针对每个主题)。
SELECT * FROM member WHERE member.topic = 'wtf' ORDER BY member.count DESC
但是,我的表增长非常快(大约每秒增加7个用户),而且我的解决方案绝对不能正确地扩展。
我试着添加一个索引,但这可能只是一个快速修复,不会永远起作用。n可以在3到50之间,我希望能够同时跟踪几百个主题。
所以我的问题是,有什么比这更聪明的方法呢?
我对任何事都很开放。我的解决方案不一定是纯sql,只要它可以在客户端之后检索。
最佳答案
此查询从topicwtf
获取前2个结果,从topicnowplaying
获取前3个结果:
(SELECT * FROM member WHERE topic = 'wtf' ORDER BY count DESC LIMIT 3) UNION (SELECT * FROM member WHERE topic = 'nowplaying' ORDER BY count DESC LIMIT 3)
这是fiddle link。
关于python - 定期查找n个列的最大值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14627220/