我有一个用于显示博客帖子的页面。在页面的开头,为了获取我使用以下SQL的数据:
SELECT posts.*, count(comments.post_id) as number_of_comments from posts left join comments on (posts.post_id = comments.post_id) WHERE post_url LIKE '$post_url' group by posts.post_id
我在页面末尾添加了一个按钮,以“阅读下一篇文章”,按下该按钮后,会找到当前显示的帖子的ID,然后从db获取下一篇文章:
$(".readNext").click(function(){
var result = "";
var postID = "postID=" + $(".post").attr("id");
$.get("/retrieveNextPost", postID, function (data) {
//SomeFunction(data);
window.location = '/blog/' + data;
});
});
<?php
include('dbconnect.php');
if (isset($_GET['postID']))
{
$post_id = $_GET['postID'];
}
$SQL = "SELECT posts.*, count(comments.post_id) as number_of_comments from posts left join comments on (posts.post_id = comments.post_id) WHERE posts.post_id > $post_id group by posts.post_id ORDER BY post_id ASC LIMIT 0, 1";
$result = mysqli_query($link, $SQL);
$row = mysqli_fetch_array($result);
echo $row['post_url'];
?>
这很有效 - 直到你到达最后一篇(最新/最高ID)博客文章。此时 - 我想完全从页面中删除按钮。因为显示它没有意义。
有没有办法修改页面顶部的SQL以标记某种Y / N标志,如果为true,我可以用它来隐藏按钮?
即。如果当前博客帖子记录是表格中的最后一个/最高ID,则将flag设置为true。
答案 0 :(得分:0)
您可以向包含最大post_id的帖子添加另一个左连接。如果这匹配(不为空)那么你就是最高职位。
脱离我的头顶:
SELECT posts.*,
count(comments.post_id) as number_of_comments,
-- if post_id matches then is highest
case when maxPosts.post_id is not null then 1 else 0 end as IsLast
from posts
left join comments on (posts.post_id = comments.post_id)
left join (
-- get max post_id and join on current post_id
select post_id from posts order by post_id desc Limit 1
) maxPosts on post.post_id = maxPosts.post_id
WHERE post_url LIKE '$post_url' group by posts.post_id
答案 1 :(得分:0)
你可以在mysql查询中使用limit和descending。
SELECT * FROM yourtable ORDER BY id DESC LIMIT 1
将限制设置为1将允许您获得1个结果。并使用desc将id从最高到最低排序
答案 2 :(得分:0)
您可以在选择查询中添加MAX(posts.post_id)
,并检查当前帖子是否为最后一个。
SELECT
posts.*, MAX(posts.post_id) as last_post,
count(comments.post_id) as number_of_comments
FROM posts
LEFT JOIN comments on (posts.post_id = comments.post_id)
WHERE post_url LIKE '$post_url'
GROUP BY posts.post_id
然后在php
中将输出返回为json
$row = mysqli_fetch_array($result);
if ($row['post_id'] == $row['last_post']) $last = true;
else $last = false;
header('Content-Type: application/json');
echo json_encode( array(
'url'=>$row['post_url'],
'isLast' => $last
)
);
在javascript部分中使用json
,测试你是否已经到达最后一个帖子,如果是,则只需删除按钮。
$(".readNext").click(function(){
var result = "";
var postID = "postID=" + $(".post").attr("id");
$.get("/retrieveNextPost", postID, function (data) {
if (data.isLast == true) $(this).remove();
else window.location = '/blog/' + data.url;
});
});
答案 3 :(得分:0)
在上述帖子之上,您可以使用LIMIT&amp;获取最新一行。查询中的DESC还有其他方法可以简化它。
例如:
PDO:您可以访问lastInsertId();返回行的最新id的函数。
MySQLi:在你的情况下,我相信你正在使用MySQLi,所以你可以使用mysqli_insert_id()函数,它的工作方式与上面的PDO函数类似。