javascript - 在 PHP 循环中加入最近的数据库行

标签 javascript php jquery mysql row

假设我有一个像这样的 MySQL 结构...

+--------------+--------------------+-------------------+
| tdate        | tuser              | tvalue            |
+--------------+--------------------+-------------------+
| 11:16:48     | John               | 10                |
+--------------+--------------------+-------------------+
| 11:16:38     | John               | 40                |
+--------------+--------------------+-------------------+
| 11:16:28     | Lisa               | 50                |
+--------------+--------------------+-------------------+
| 10:16:48     | Lisa               | 20                |
+--------------+--------------------+-------------------+

和这样的 php 查询:

<?php
$username =  'test';
$sql=mysqli_query($db,"SELECT * FROM t ORDER BY tid DESC LIMIT 20");
while($row=mysqli_fetch_array($sql))
{
    $tuser= $row['tuser'];
    $tvalue= $row['tvalue'];
    $tdate= $row['tdate'];
    ?>
    <div id="<?php echo $tvalue; ?>" class="message_box">
        <?php echo $tdate; ?> -
        <?php echo $tvalue; ?> -
        <?php echo $tuser; ?>
    </div>
    <?php
} 
?>

这当前按每一行列出 mysql 表,如下所示:

2016-02-22 11:16:48 - 10 - John
2016-02-22 11:16:38 - 40 - John
2016-02-22 11:16:28 - 50 - Lisa
2016-02-22 10:16:48 - 20 - Lisa

我想这样看:

2016-02-22 11:16:48 - 50 - John
2016-02-22 11:16:28 - 50 - Lisa
2016-02-22 10:16:48 - 20 - Lisa

这意味着如果新行在 60 秒内创建(对于同一用户),则循环必须对值求和。Lisa 有两行,但由于存在一个小时的时间戳差异,因此必须将其列出像往常一样......它需要它自动更新,这意味着它最初会为 John 显示 40 的值,但是在添加新行 10 秒后它必须相应地更新为 50。还有 MYSQL QUERY LIMIT of 20 的问题,它可能会分解在 60 秒内插入的行并给出错误的总值计算。我知道这很难,但有人对此有简单的解决方案吗?

感谢 Asur,我现在有这个:

SELECT ROUND(UNIX_TIMESTAMP(tdate) DIV 60) AS time,tuser,SUM(tvalue) 
FROM t 
GROUP BY EXTRACT(DAY_HOUR FROM tdate),tuser 
ORDER BY tid DESC 
LIMIT 20;

但问题是,如果最后一个数据库行是 JOHN,如果在同一小时内已经有一个 John 行在该行之上,他将不会被列在最后。

IF I HAVE: 
JOHN 10 
GEORGE 10 
GEORGE 10 
JOHN 10 

It will list: 
JOHN 20 
GEORGE 20 

And it should be the other way arround, where the last row counts: 
GEORGE 20 
JOHN 20

最佳答案

我建议您直接在sql查询中执行,如下所示:

SELECT ROUND(UNIX_TIMESTAMP(tdate) DIV 60) AS time,tuser,SUM(tvalue)       
FROM t
GROUP BY time,tuser
ORDER BY tid DESC 
LIMIT 20;  

就优化和花费的时间而言,这要好得多。

关于javascript - 在 PHP 循环中加入最近的数据库行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35552523/

相关文章:

javascript - 重新加载页面而不向上滚动

php - 城市半径和 mySQL

php - 如何通过白名单防止 IFraming

php - Laravel 5 Windows 服务器,mysql 500 错误,变为空白

php - Ajax 来自 PHP 的多重回显

javascript - 解决在 Chrome 中使用 jQuery 实时过滤 1500 多个项目的问题

javascript - jquery 中的 Setinterval() 函数无法正常工作

javascript - 使用电子邮件和密码错误验证用户身份

javascript - node-mysql connection.query() 返回未定义

javascript - 从数据表选定行中获取最低和最高日期值