Php 使用sql按日期显示3个最重要的结果

Php 使用sql按日期显示3个最重要的结果,php,sql,database,select,Php,Sql,Database,Select,我有一个网站,我在其中创建了一个图书库 桌子是:书 它包含:图书id、图书标题、图书目录、图书图片、图书内容、活动、图书日期、访问、图书发件人 “book_sender”是发件人的ID,因为任何登录用户都可以添加书籍, 我想每周给寄了很多书的最好的寄件人送一份礼物 因此,我想在一个PHP文件中显示本周前三名发件人,以便在前三名之间进行挑战 Champ ---------- book_id book_title book_cat book_img book_content active book_

我有一个网站,我在其中创建了一个图书库

桌子是:书

它包含:图书id、图书标题、图书目录、图书图片、图书内容、活动、图书日期、访问、图书发件人

“book_sender”是发件人的ID,因为任何登录用户都可以添加书籍, 我想每周给寄了很多书的最好的寄件人送一份礼物 因此,我想在一个PHP文件中显示本周前三名发件人,以便在前三名之间进行挑战

Champ
----------
book_id
book_title
book_cat
book_img
book_content
active
book_date
visits
book_sender

sql查询如下所示:

select book_sender, count(book_id) as num_books 
from champ 
where DATEDIFF(sysdate(), book_date) <= 7 
group by book_sender
limit 0, 3;

代码段使用适当的值替换db_名称、db_用户和db_密码:

<?php
   $db = new PDO('mysql:host=localhost;dbname=db_name;charset=UTF8', 'db_user', 'db_password');
   $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
   $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
   $stm = $db->prepare( "
      SELECT book_sender `Sender ID`, COUNT(*) `Books Sent`
      FROM Champ
      WHERE book_date > DATE_ADD( now(), INTERVAL -7 DAY )
      GROUP BY book_sender
      LIMIT 0, 3" );
    $stm->execute();
    while( $row = $stm->fetch(PDO::FETCH_ASSOC) ) {
       $result[] = $row;
    }

    // Step through $result and print out

?>

还假设您使用的是MySQL和PDO。

top3在一周内还是整个时间段内?top3在一周内最后7天内?谢谢您,您只是在寻找SQL查询,还是所有附带的PHP代码?如果可以的话,两者都可以:此表是否实际跟踪发送,或者是否有其他相关表跟踪发送?看起来奇怪的是,你没有将这些规范化。MySQL a répondu:1305-FUNCTION databaseName.date_diff不存在这一个很好,MySQL n'a retournéaucun enregistration。训练:0.0035秒。如何在php文件中打印结果?我试过了!但是它不起作用!我尝试了很多方法!比如include config.php。。。致命错误:对…中的非对象调用成员函数prepare。。。。你一定没有我假设的连接功能。修改代码段以包含通用连接字符串并实例化PDO DB对象。致命错误:未捕获异常“PDOException”,消息为“SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,了解在URL第3行“DAY,-7 GROUP BY book_sender LIMIT 0,3”附近使用的正确语法!哎呀,日期和添加参数用于错误的平台。已编辑,请重试。致命错误:调用URL中未定义的函数sysdate