我不确定如何管理这个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不会工作......
答案 0 :(得分:2)
1。如果您不仅是该项目的ID,还有blog.date
和blogimage.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