php置顶功能实现
数据库设计
在需要置顶的数据表中添加一个字段用于标识置顶状态,通常使用 is_top 或 top 字段,类型为布尔值或整数(1表示置顶,0表示非置顶)。
ALTER TABLE `posts` ADD `is_top` TINYINT(1) NOT NULL DEFAULT '0';
查询排序逻辑
在查询数据时,将置顶的记录优先排序,再按其他条件(如时间、ID等)排序。
$query = "SELECT * FROM `posts` ORDER BY `is_top` DESC, `created_at` DESC";
$result = $pdo->query($query);
置顶操作接口
提供置顶和取消置顶的接口,通过更新 is_top 字段实现。

// 置顶
$stmt = $pdo->prepare("UPDATE `posts` SET `is_top` = 1 WHERE `id` = :id");
$stmt->bindParam(':id', $postId, PDO::PARAM_INT);
$stmt->execute();
// 取消置顶
$stmt = $pdo->prepare("UPDATE `posts` SET `is_top` = 0 WHERE `id` = :id");
$stmt->bindParam(':id', $postId, PDO::PARAM_INT);
$stmt->execute();
前端展示
在前端列表中,可以通过样式或标记区分置顶内容。
<div class="post <?php echo $post['is_top'] ? 'top-post' : ''; ?>">
<?php if ($post['is_top']): ?>
<span class="top-badge">置顶</span>
<?php endif; ?>
<h3><?php echo htmlspecialchars($post['title']); ?></h3>
</div>
多级置顶
如果需要支持多级置顶(如置顶1、置顶2),可以使用整数类型的 top_level 字段,数值越大优先级越高。

ALTER TABLE `posts` ADD `top_level` INT NOT NULL DEFAULT '0';
查询时按 top_level 降序排序:
$query = "SELECT * FROM `posts` ORDER BY `top_level` DESC, `created_at` DESC";
$result = $pdo->query($query);
更新置顶级别:
$stmt = $pdo->prepare("UPDATE `posts` SET `top_level` = :level WHERE `id` = :id");
$stmt->bindParam(':id', $postId, PDO::PARAM_INT);
$stmt->bindParam(':level', $topLevel, PDO::PARAM_INT);
$stmt->execute();






