Php 是否可以将此查询更改为执行两个功能?

Php 是否可以将此查询更改为执行两个功能?,php,mysql,database,pagination,Php,Mysql,Database,Pagination,我决定在这里重新编写并详细阐述,而不是再次发布 我从jtheman收到以下代码,允许我从数据库中选择52个更新,每周添加一个新的更新并删除旧的更新。它工作得绝对完美 他的代码: $starttime = strtotime("28 December 2012"); // a recent Friday $week = 7 * 24 * 60 * 60; // time value of a week $posts = 185; // number of posts in your db

我决定在这里重新编写并详细阐述,而不是再次发布

我从jtheman收到以下代码,允许我从数据库中选择52个更新,每周添加一个新的更新并删除旧的更新。它工作得绝对完美

他的代码:

$starttime = strtotime("28 December 2012"); // a recent Friday
  $week = 7 * 24 * 60 * 60; // time value of a week
  $posts = 185; // number of posts in your db
  $limit = 52; // number of shown posts
  $offset = floor((time()-$starttime)/$week); // rounds down difference in weeks from startdate until now
  while ($offset>$posts-$limit) $offset = $offset - ($posts-$limit); 
  // this will start over when you have reached the end of the cycle ie offset 148...
我的问题是:

// retrieve all update details
$conn = dbConnect('query');
$sql = "SELECT *
FROM updates
WHERE flag_live = 'Y'
ORDER BY update_id DESC
LIMIT ".$offset.",".$limit;
$result = $conn->query($sql) or die(mysqli_error());
$uInfo = $result->fetch_assoc();
同样,这是完美的。新的问题是,我在一个页面上得到52个更新,我希望能够设置,比如说每页4个,并滚动13个页面,而不是一个长页面

所以,我想做的是修改这个查询,以便选择52个更新(每周五添加一个新的更新,删除一个旧的更新),但我只能在页面上一次显示4个。我意识到这不是分页问题,而是编写查询来完成两个功能

这可以通过子查询完成吗?我可以使用jQuery滑块或等效工具来进行分页,但我确实希望避免这种情况


非常感谢

我想这就是你想要的。。使用这个“功能”,你可以“切换”更多的选项,但我认为你不会真的需要它。。只需更改
$limit=
数字即可满足您的需要

<?php

  $starttime = strtotime("28 December 2012"); // a recent Friday
  $week = 7 * 24 * 60 * 60; // time value of a week
  $posts = 200; // number of posts in your db
  //$limit = 52; // number of shown posts

if($posts > 100) // or you can enter here $posts == 200, but it is better 2 leave it on "automatic"..
{ 
$limit = 52; //or as many you like like 30
} 
else
{ 
$limit = 6; // or as many you like ie 10 
}

  $offset = floor((time()-$starttime)/$week); // rounds down difference in weeks from     startdate until now
  while ($offset>$posts-$limit) $offset = $offset - ($posts-$limit); 
  // this will make the cycle start over when you have reached the end (ie offset 148)...

  ?>

要在PHP代码中解决这个问题(在服务器端),您可以添加一个url参数
?page=x
,其中x是您的页码

在计算中几乎相同:

$starttime = strtotime("28 December 2012"); // a recent Friday
$week = 7 * 24 * 60 * 60; // time value of a week
$posts = 185; // number of posts in your db
$totallimit = 52; // number of shown posts (on all pages)
$limit = 4; // number of posts on each page.
$offset = floor((time()-$starttime)/$week); // rounds down difference in weeks from startdate until now
while ($offset>$posts-$totallimit) $offset = $offset - ($posts-$totallimit); 
// this will start over when you have reached the end of the cycle ie offset 148...

// get the page number (or set it to 0 if not set)
if (isset($_GET['page']) && intval($_GET['page'])) $page=intval($_GET['page']);
else $page = 0;

$offset = $offset + ($page*$limit); // correct the offset according to the page number
然后使用数据库查询,不做任何更改

然后在视图中添加页面链接(如果之前执行了上述操作,则此代码有效):


|
(用脚本的正确文件名替换
mypage.php


我为当前所选页面的页面锚定
active
添加了一个类,但您可以按照自己的喜好执行此操作。

Er…比如如何使其工作。如何获取上面的代码并提取52条记录,然后逐页浏览它们。最好的方法是在客户端执行这些操作。尽管我讨厌使用jQuery,但这看起来确实很有希望。但是我不能让显示看起来像您引用的页面上的示例表。我有文本、照片和链接.Xfile,看起来好像它可以工作。我明天去查一下,然后告诉你。非常感谢你!我仔细看了一下,决定进一步阐述这篇文章。更改
$limit
在这里不起作用,因为它会影响滚动更新。谢谢你的建议!是的,wordman,这个限制的改变将打破原来52篇帖子的循环…你太棒了,谢谢你!我使用子查询进行分页,昨天晚上从我的另一篇文章中获得了这些信息,但我今天肯定在尝试。非常感谢你!那太顺利了!工作绝对完美。我对你感激不尽!很高兴它能起作用。datatables示例在您的例子中可能有点过分,但是用于分页的jquery/ajax解决方案也很不错。但服务器端解决方案往往坚如磐石,在某些情况下可能会很好。我非常渴望学习ajax…只是需要时间。再说一次,非常感谢你!
<?php for($p=0;$p<ceil($totallimit/$limit);$p++): ?>
   <a href="mypage.php?page=<?php echo $p; ?>" <?php if ($p==$page) echo 'class="active"'; ?>>Page <?php echo $p+1; ?></a> |
<?php endfor; ?>