如何使用SQL或PHP忽略查询结果中的一行?
我能忽略最早日期的帖子吗?用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
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语法。换句话说,不能单独使用偏移量。