如何用PHP PDO对比两个MySQL表,按需返回对应列数据?
优化方案:单SQL查询实现用户信息展示
你可以通过LEFT JOIN关联两张表,配合COALESCE函数实现一次查询完成需求:优先返回user_details中的完整姓名,若不存在则返回user_login中的用户名,无需两次请求数据库。
优化后的SQL语句
SELECT COALESCE(CONCAT(ud.userFname, ' ', ud.userLName), ul.username) AS display_name FROM user_login ul LEFT JOIN user_details ud ON ul.id = ud.user_login_ID WHERE ul.id = :user_id
LEFT JOIN:保证即使user_details中没有对应记录,也能返回user_login的基础信息COALESCE:按顺序取第一个非空值,优先使用拼接后的完整姓名,取不到则 fallback 到用户名CONCAT:将名和姓拼接成符合展示需求的完整姓名
对应的PHP代码实现
$userID = $_SESSION['userID']; // 修正原代码SESSION键名的错误,无需加$符号 $sql = 'SELECT COALESCE(CONCAT(ud.userFname, " ", ud.userLName), ul.username) AS display_name FROM user_login ul LEFT JOIN user_details ud ON ul.id = ud.user_login_ID WHERE ul.id = :user_id'; $stmt = $pdo->prepare($sql); $stmt->execute(['user_id' => $userID]); $result = $stmt->fetch(PDO::FETCH_ASSOC); // 输出结果,统一首字母大写保持原逻辑 if ($result) { echo ucfirst($result['display_name']); }
额外说明
- 修正了原代码中
$_SESSION['$userID']的语法错误,SESSION键名不需要添加$符号 - 用
ucfirst统一处理输出格式,确保用户名首字母大写,和原逻辑保持一致 - 单次数据库查询减少了IO开销,相比两次查询更高效简洁
内容的提问来源于stack exchange,提问作者ChrisKsag
相关产品推荐
相关产品推荐

