Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 根据最近24小时的共享获取行_Java_Mysql_Sql_Database_Database Design - Fatal编程技术网

Java 根据最近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)

我正在开发某种社交信息发布应用程序。在这方面,我需要获得过去24小时的数据趋势数据。我有3个表-消息、用户、共享

消息-消息id、内容、用户id、创建时间

用户-用户id、电子邮件和其他数据

共享-消息id、用户id、创建位置

现在,我想要获取的是消息的详细信息,以及它的总股数。我想根据过去24小时的最高份额对这些信息进行分类,这会给我病毒性的信息

我尝试过,可能无效尝试:

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)