mysql select语句和限制记录的数量

时间:2010-08-22 19:45:10

标签: php mysql

我正在编写博客文章的某种东西,作者将发布文章,它将显示在前端,我的问题开始选择帖子,因为我必须满足发布新闻的某些条件前端,

我在数据库中有4个字段,即

title
pic_title
pic_brief
pic_detail

你猜对了,除了标题表之外,其余的三个将保存varchar数据类型中的图像的路径,这将用于显示为帖子,前端的格式是这样的

a)总共会有八个帖子  显示在前端(八  来自数据库的条目)

b)顶部会有三个帖子,其中包含来自的值  表标题,pic_title和  pic_brief(共3个值)

c)其余五个将仅包含标题和pic_title  (不包括顶部的三个条目)  请注意:我希望第二个查询排除前3个记录  它已经存在于顶层,即  (第一个查询= 3个帖子降序  order,second query = 8 - first 3 = 5  交)

我想要的帖子顺序是由id DESC

编辑:我把第一个查询作为

SELECT * FROM news ORDER BY id DESC LIMIT 3

现在,如果我采用相同的第二个查询并尝试再次按desc顺序填充值,则将访问相同的记录

简单来说,我想要一个将通过id DESC跳过最后三个记录的查询

我如何在PHP中实现这一壮举?

3 个答案:

答案 0 :(得分:5)

如果你只是想要SQL,那么它就是:

第一次查询

SELECT * FROM `table` LIMIT 3

第二次查询

SELECT * FROM `table` LIMIT 3,5

(其中table是您的表的名称。当然您可能想要添加一些ORDER BY子句。要在PHP中执行这些查询,我建议reading the manual。这样做之后你有任何具体问题,然后你可以发一个新问题。

答案 1 :(得分:2)

在这种情况下,我可能会选择一次选择所有8条记录 - 数据库访问次数越少越好。

  SELECT t.title,
         t.pic_title,
         t.pic_brief
    FROM TABLE t
ORDER BY t.id DESC
   LIMIT 8

...因为剩下的只是演示文稿:

$query = sprintf("SELECT t.title,
                         t.pic_title,
                         t.pic_brief
                    FROM TABLE t
                ORDER BY t.id DESC
                   LIMIT 8");

// Perform Query
$result = mysql_query($query) or die( mysql_error() );

$rowcount = 1;

// Use result
while ($row = mysql_fetch_assoc($result)) {

  if(rowcount <= 3) {
     echo $row['title'] 
     echo $row['pic_title'] 
     echo $row['pic_brief'] 
  } else {
     echo $row['title'] 
     echo $row['pic_title'] 
  }

  ++$rowcount;
}

答案 2 :(得分:1)

第一个查询将是这样的

"select title, pic_title , pic_brief from table_name order by post_id desc limit 0 , 3"

其余的五个将是

"select title, pic_title from table_name order by post_id desc limit 3 , 5"

第二个查询将排除第一个查询返回的三个结果...

如果你想要更完美,你可以收集第一个查询返回的所有三个ID,并可以在第二个查询中添加NOT IN。

"select title, pic_title from table_name where post_id not in (1,2,3) order by post_id desc limit 0 , 5";