PHP SQL两表内连接实现:通过user_id关联获取最新帖子及发布者用户名
PHP实现两张表内连接查询最新帖子及对应发布者
核心查询SQL
通过INNER JOIN关联两张表的关联字段,按帖子ID倒序取第一条即可得到最新发布的帖子及发布者信息:
SELECT users.name, microposts.content FROM microposts INNER JOIN users ON microposts.user_id = users.id -- 若microposts表有发布时间字段,更推荐用发布时间倒序:ORDER BY microposts.created_at DESC ORDER BY microposts.id DESC LIMIT 1;
代码实现
方案1:PDO实现(更推荐,支持预处理、兼容性更好)
<?php // 数据库连接配置,替换为你自己的实际配置 $host = '127.0.0.1'; $dbname = '你的数据库名'; $username = '数据库用户名'; $password = '数据库密码'; try { // 建立PDO连接 $pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8", $username, $password); // 设置PDO错误模式为异常抛出 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // 执行查询 $stmt = $pdo->query("SELECT users.name, microposts.content FROM microposts INNER JOIN users ON microposts.user_id = users.id ORDER BY microposts.id DESC LIMIT 1"); // 获取查询结果 $result = $stmt->fetch(PDO::FETCH_ASSOC); // 输出结果 echo $result['name'] . PHP_EOL; echo $result['content']; } catch(PDOException $e) { echo "查询失败: " . $e->getMessage(); } ?>
方案2:mysqli实现
<?php // 数据库连接配置,替换为你自己的实际配置 $host = '127.0.0.1'; $dbname = '你的数据库名'; $username = '数据库用户名'; $password = '数据库密码'; // 建立mysqli连接 $conn = new mysqli($host, $username, $password, $dbname); // 检查连接 if ($conn->connect_error) { die("连接失败: " . $conn->connect_error); } // 执行查询 $sql = "SELECT users.name, microposts.content FROM microposts INNER JOIN users ON microposts.user_id = users.id ORDER BY microposts.id DESC LIMIT 1"; $result = $conn->query($sql); if ($result->num_rows > 0) { // 读取数据 $row = $result->fetch_assoc(); // 输出结果 echo $row['name'] . PHP_EOL; echo $row['content']; } else { echo "没有查询到数据"; } // 关闭连接 $conn->close(); ?>
内容的提问来源于stack exchange,提问作者Dadinho2000
相关产品推荐
相关产品推荐

