如何使用SQL或PHP忽略查询结果中的一行?

如何使用SQL或PHP忽略查询结果中的一行?,php,mysql,Php,Mysql,我能忽略最早日期的帖子吗?用SQL还是PHP SELECT subject, date FROM posts WHERE id = $id ORDER BY date DESC while ($row = mysql_fetch_array($query)) { 干杯假设日期唯一地确定给定id的行 SELECT subject, date FROM posts WHERE id = $id AND date NOT IN ( SELECT MI

我能忽略最早日期的帖子吗?用SQL还是PHP

SELECT subject, date 
FROM posts
WHERE id = $id
ORDER BY date DESC
while ($row = mysql_fetch_array($query)) {

干杯

假设日期唯一地确定给定id的行

  SELECT subject, date 
    FROM posts
   WHERE id = $id
     AND date NOT IN
         ( SELECT MIN(date)
             FROM posts
            WHERE id = $id
         )
ORDER BY date DESC

假设日期唯一地确定给定id的行

  SELECT subject, date 
    FROM posts
   WHERE id = $id
     AND date NOT IN
         ( SELECT MIN(date)
             FROM posts
            WHERE id = $id
         )
ORDER BY date DESC

如果您使用的是SQL 2005或更高版本,则可以使用row_number函数

With MyCTE AS (
    SELECT subject, 
           date,
           RowNumber = ROW_NUMBER() OVER(ORDER BY date DESC)
    FROM   posts
    WHERE  id = $id)
SELECT *
FROM   MyCTE
WHERE  RowNumber > 1
ORDER BY date DESC

如果您使用的是SQL 2005或更高版本,则可以使用row_number函数

With MyCTE AS (
    SELECT subject, 
           date,
           RowNumber = ROW_NUMBER() OVER(ORDER BY date DESC)
    FROM   posts
    WHERE  id = $id)
SELECT *
FROM   MyCTE
WHERE  RowNumber > 1
ORDER BY date DESC

您可能会编写一些复杂的sql来完成这项工作,或者您也可以在php中完成这项工作:

$first = true;
while ($row = mysql_fetch_array($query)) {
    if ( $first ) {
       $first = false;
       continue;
    }

    // Process rows here
}

您可能会编写一些复杂的sql来完成这项工作,或者您也可以在php中完成这项工作:

$first = true;
while ($row = mysql_fetch_array($query)) {
    if ( $first ) {
       $first = false;
       continue;
    }

    // Process rows here
}

我没有什么可以测试的,但这行得通吗

SELECT subject, date 
FROM posts
WHERE id = $id
OFFSET 1
ORDER BY date DESC
或者评论中指出的MySQL 5兼容性

SELECT subject, date 
    FROM posts
    WHERE id = $id
    LIMIT 1,18446744073709551615;
    ORDER BY date DESC

大量数据完全是从MySQL文档中复制的

我没有什么可以测试的,但这行得通吗

SELECT subject, date 
FROM posts
WHERE id = $id
OFFSET 1
ORDER BY date DESC
或者评论中指出的MySQL 5兼容性

SELECT subject, date 
    FROM posts
    WHERE id = $id
    LIMIT 1,18446744073709551615;
    ORDER BY date DESC


大量数据完全是从MySQL文档中复制的

您能描述一下示例数据和预期输出吗?您可以编写一个子查询来获取最早的日期,并将其包含在where子句中。我不知道如何编码它。希望您没有多行共享同一id。您能描述示例数据和预期输出吗?您可以编写一个子查询,获取最早的日期,并将其包含在where子句中。我根本不知道如何编码。希望你不会有多行共享同一个id。为了更清楚一点,我会使用Where date Select MinDate。。。而不是日期不在。。。为了更清楚一点,我会使用Where date Select MinDate。。。而不是日期不在。。。哈我不太会编程,我觉得这很聪明。Upvote支持您。如果要求非常简单,只需从结果的第二行开始,那么我也会投票支持代码内解决方案。行处理不应该作为else的一部分吗?否则,第一行将像其他行一样进行处理。@GiladG-这就是为什么在if中有continue语句。它跳过循环的其余部分,从头开始。哈!我不太会编程,我觉得这很聪明。Upvote支持您。如果要求非常简单,只需从结果的第二行开始,那么我也会投票支持代码内解决方案。行处理不应该作为else的一部分吗?否则,第一行将像其他行一样进行处理。@GiladG-这就是为什么在if中有continue语句。它跳过了循环的其余部分,从一开始就重新开始。这里也没有测试过,但这对我来说很好,offset将第一行视为0,因此应该从第二行开始。我认为在mysql中无法做到这一点。从手动版本5.0开始:为了与PostgreSQL兼容,MySQL还支持LIMIT row_count OFFSET语法。换句话说,你不能单独使用偏移量。这里也没有测试,但我觉得这很好,偏移量将第一行视为0,因此应该从第二行开始。我认为你不能在mysql中这样做。从手动版本5.0开始:为了与PostgreSQL兼容,MySQL还支持LIMIT row_count OFFSET语法。换句话说,不能单独使用偏移量。