如何从php中获取mysql的下一个结果(在某些ID之后)

时间:2015-12-11 06:57:04

标签: php mysql

我不确定如何管理这个sql / php问题。

我有一个SQL查询

SELECT * 
FROM   blogimage 
       INNER JOIN blog 
               ON blogimage.blog_id = blog.blog_id 
WHERE  blog.active = '1' 
ORDER  BY blog.date DESC, 
          blog.blog_id DESC, 
          blogimage.position ASC 

它给了我一个结果列表(比如100个结果)

我想说:在上面的sql查询中描述的ORDER中,找到blogimage_id = 1234并在那之后给我下一个blogimage_id结果。

不确定我是否正确解释了我的问题。

以及如何将其存储在PHP变量中?

能做到吗?

我查询的结果

blogimage_id
2171
2162
2163
2170
2164

所以如果我想检查blogimage_id = 2170,我需要得到结果2164.所以添加WHERE blogimage_id> 2170不会工作......

3 个答案:

答案 0 :(得分:2)

1。如果您不仅是该项目的ID,还有blog.dateblogimage.position,那么您可以使用此查询:

SELECT
    * 
FROM
    blogimage INNER JOIN blog USING(blog_id)
WHERE
    blog.active = '1' 
    AND blog.date <= :date 
    AND blog.blog_id < :id 
    AND blogimage.position < :position
ORDER BY 
    blog.date DESC, 
    blog.blog_id DESC, 
    blogimage.position ASC
LIMIT 1

:date - 项目的日期
:id - 其ID为 :position - blogimage.position

2. 如果不这样做,那么您需要先从表格中以相同的顺序检索所有ID:

SELECT
    blog_id
FROM
    blogimage INNER JOIN blog USING(blog_id)
WHERE
    blog.active = '1'
ORDER BY 
    blog.date DESC, 
    blog.blog_id DESC, 
    blogimage.position ASC

此查询应该非常快,因为它使用主键。

然后以编程方式获取所需的ID:

$ids = array_column('blog_id', $result); // $result - the result of the query above
$key = array_search($id, $ids); // $id - the given ID
if (false !== $key && array_key_exists($key+1, $ids)) {
    $idYouNeed = $ids[$key+1]; // this is what you want
} else {
    $idYouNeed = null; // there is no given ID in the table or it's the last one
}

答案 1 :(得分:0)

如果我理解你的问题你需要限制你的sql给你第二条记录?要实现这一点,您需要添加limit子句

select * from blogimage INNER JOIN blog ON blogimage.blog_id = blog.blog_id WHERE blog.active = '1' order by blog.date DESC, blog.blog_id DESC, blogimage.position ASC limit 1,1

答案 2 :(得分:0)

SELECT * 
FROM   blogimage 
       INNER JOIN blog 
               ON blogimage.blog_id = blog.blog_id 
WHERE  blog.active = '1' 
  AND  blogimage_id > 1234
ORDER  BY blog.date DESC, 
          blog.blog_id DESC, 
          blogimage.position ASC 
limit 1,1