简单的 SQL 问题

Posted

技术标签:

【中文标题】简单的 SQL 问题【英文标题】:Simple SQL question 【发布时间】:2009-07-12 13:37:58 【问题描述】:

(我编不出好标题,抱歉)

所以我用这个分页:

$page = $_GET['page'];

$max = 5;

// if $page is empty, set page number to 1
if (empty($page)) $page = 1;

$limit = ($page - 1) * $max; 

$sql = mysql_query("SELECT * FROM posts ORDER BY date DESC LIMIT $limit, $max");

$totalres = mysql_result(mysql_query("SELECT COUNT(id) AS tot FROM posts WHERE tid =     1"),0);    

$totalpages = ceil($totalres / $max);
?>

这可行,但我想要的是,即使我更改页面,日期最早的帖子也始终保持在最前面。我怎样才能做到这一点?我知道你可以,但我不记得怎么做。

希望你这样做,谢谢

【问题讨论】:

只是一个快速提醒,而不是吹毛求疵。摆脱那个 Select * 您选择的所有数据都需要从数据库服务器传输到您的 php 脚本。 William T Wild:你不知道他不需要所有数据。但是,如果你不同意,那么我同意,去掉那个选择 *。 嗯,这里还有一些其他的答案,显然由于匿名投票而被作者删除?糟糕。任何人都应该如何从中学习......? 【参考方案1】:

您可能需要进行联合查询,因为您真正想要的是两条数据的组合...

    最早的帖子 所有其他帖子减去针对页面位置调整的最旧帖子...

    select * from posts order by date DESC limit 0,1
    union
    select * from posts order by date desc limit $start,$end

现在调整你的值,所以 start 是你想要的最小页面 1(如果它是 0,你最旧的帖子将显示两次)

【讨论】:

以上是关于简单的 SQL 问题的主要内容,如果未能解决你的问题,请参考以下文章

简单的 SQL 问题(MySQL)

SQL Server SQL性能优化之--数据库在“简单”参数化模式下,自动参数化SQL带来的问题

SQL Server SQL性能优化之--数据库在“简单”参数化模式下,自动参数化SQL带来的问题

这个简单的基于 SQL 的 ETL 解决方案有啥问题?

来自 Sql 数据库的简单随机样本

简单的sql查询