如何按日期顺序回显元素,直到30个元素被回显为止


How do I echo elements in order of date until 30 elements have been echoed?

对于一个事件网站,我有一个事件数据库。每个都有一个id标题日期(Y-m-d)。

对于我的页面,我想:

  1. 回显今天发生的所有事件
  2. 如果今天没有至少30个事件,则在今天之后发生回显事件(按时间顺序),直到页面上至少回显30个事件
  3. 包括一个"更多"按钮,该按钮可响应接下来的30个事件

我目前正在使用AJAX,点击后用"More.php"代码替换"More"。无限循环的最佳方式是什么,每次点击"更多",它会加载30多个事件?

这是我的相关代码:

<?php
// All events happening today
$result = mysql_query("SELECT * FROM events WHERE date='$today'");
while($row = mysql_fetch_array($result))
  {
  $title = $row['title'];
  $date = $row['date'];
  echo $title;
  echo $date;
  }
// All events for next 9 days
for ($i=1; $i<=10; $i++)
  {
  $eventdate = date('Y-m-d', mktime(0, 0, 0, date("m"), date("d")+$i, date("y")));
  $result = mysql_query("SELECT * FROM events WHERE date='$eventdate'");
  $row = mysql_fetch_array($result);
  while($row = mysql_fetch_array($result))
    {
    $title = $row['title'];
    $date = $row['date'];
    echo $title;
    echo $date;
    }
  }
?>
<!--More button-->
<script type="text/javascript"        
src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script type="text/javascript">
  $(document).ready(function(){
    $("more").click(function(){
      $("more").load('more.php');
    });
  });
</script>
<more>More</more>

more.php:

for ($i=11; $i<=20; $i++)
  {
  $eventdate = date('Y-m-d', mktime(0, 0, 0, date("m"), date("d")+$i, date("y")));
  $result = mysql_query("SELECT * FROM events WHERE date='$eventdate'");
  $row = mysql_fetch_array($result);
  while($row = mysql_fetch_array($result))
    {
    $title = $row['title'];
    $date = $row['date'];
    echo $title;
    echo $date;
    }
}
// Another "More" button should go here

很明显,我没有实现我的目标。现在,它在回响:

  1. 从今天起的所有活动(检查!)
  2. 接下来9天的每一项活动(boo)
  3. 更多页面显示第11-20天的每一个事件(boo)
  4. 它不会无限循环,也就是说,我不能点击More.php中的"更多"

我已经尝试了几个小时的在线教程,但不知道如何实现我想要的循环。任何提示都将不胜感激。感谢:)

我对它的看法是:

  1. 使用SQL顺序实现时间顺序使用日期列-我忘了SQL日期中的"最新第一"(我认为是DESC)。不管怎样,只要测试一下。

  2. 将您的查询限制为30行

  3. 在会话中存储最后一行(在开头,30)。

  4. 用结果回显页面

  5. 单击"更多"将通过AJAX加载另外30行,但这次,从(会话变量值)+1开始加载。这样,如果你加载前30个,我们现在从31-60开始。在得到31-60之后,覆盖现有的会话变量,使其现在保持60。