Java 根据最近24小时的共享获取行
我正在开发某种社交信息发布应用程序。在这方面,我需要获得过去24小时的数据趋势数据。我有3个表-消息、用户、共享 消息-消息id、内容、用户id、创建时间 用户-用户id、电子邮件和其他数据 共享-消息id、用户id、创建位置 现在,我想要获取的是消息的详细信息,以及它的总股数。我想根据过去24小时的最高份额对这些信息进行分类,这会给我病毒性的信息 我尝试过,可能无效尝试:Java 根据最近24小时的共享获取行,java,mysql,sql,database,database-design,Java,Mysql,Sql,Database,Database Design,我正在开发某种社交信息发布应用程序。在这方面,我需要获得过去24小时的数据趋势数据。我有3个表-消息、用户、共享 消息-消息id、内容、用户id、创建时间 用户-用户id、电子邮件和其他数据 共享-消息id、用户id、创建位置 现在,我想要获取的是消息的详细信息,以及它的总股数。我想根据过去24小时的最高份额对这些信息进行分类,这会给我病毒性的信息 我尝试过,可能无效尝试: SELECT msg.`message_id`, msg.`user_id`, COUNT(share.user_id)
SELECT msg.`message_id`, msg.`user_id`, COUNT(share.user_id) share_count
msg.created_at, category FROM
(select * from message_shares ms where created_at>= DATE_SUB(CURDATE(), INTERVAL 24 HOUR)) trending,
`messages` msg
left join message_shares share ON share.message_id = msg.message_id
GROUP by msg.message_id order by msg.id desc
它给了我无效的共享计数,也没有给出有效的结果和消息。而且它没有根据最近24小时的共享计数对消息进行排序
我对MySQL查询没有太多的高级知识。因此,请提供我的方法或查询,以找到这些细节 也许你正在寻找这样的东西:
选择messages.message\u id、messages.user\u id、messages.created\u at、,
计数(*)作为共享计数
来自消息
messages.message\u id=shares.message\u id上的内部联接共享
其中shares.created_at>=DATE_SUB(现在(),间隔24小时)
按共享分组。消息\u id
按份额订购\u计数说明;
直观的解释是,首先,从
消息
中选择与共享
中的行连接的行,并根据共享
的创建的在24小时间隔内进行过滤。作为联接的结果,具有相同消息的行数与此消息的共享数相同。然后,您可以按共享的消息id
进行分组,这样每个消息都有一个“共享组”,您可以通过添加计数(*)
列来获得每个组的大小,该列现在可以按组工作。然后按share\u count
对行进行排序,并获得查询与所需字段的投影。此公式应避免“连接…分组方式”导致的“充气-放气”性能损失:
另外,在上共享
:
INDEX(message_id, created_at)
如果需要进一步讨论,请为涉及的表提供SHOW CREATE TABLE
。它不起作用。它为每一行返回相同的“share\u count”。
INDEX(message_id, created_at)