提问人:ChrisKsag 提问时间:11/7/2023 最后编辑:ChrisKsag 更新时间:11/7/2023 访问量:53
使用 PHP 比较两个 MySQL 表 PDO根据行是否存在从任一表返回列数据
Compare Two MySQL tables using PHP PDO return Column data from either table based on if row exists
问:
我正在尝试运行一些 PHP 以根据 ID 搜索表 2,如果 ID 存在,则从行返回数据。
我的结构是这样的
user_login - ID ||用户名 ||电子邮件 ||通行证 ||创建日期
user_details - ID(同上ID)||用户名字 ||姓氏 ||地址。。。。
对于管理面板,如果用户尚未完成完整注册,我将尝试显示表 1 中的“用户名”。因此,如果表 2 中不存在 ID,则显示表 1 中的用户名。
我还在学习,我知道我的代码不是正确的方法。它确实有效,但我觉得它很草率,我很难找到比较两个表的最佳方式的资源。
在表 user_details 中搜索 ID 的数据库,如果没有,则返回用户名。
$userID = $_SESSION['$userID'];
// PDO Prepaired prepair and execute
$navBarsql = 'SELECT * FROM user_details WHERE user_login_ID = :user_login_ID;';
$stmt = $pdo->prepare($navBarsql);
$stmt->execute([
'user_login_ID' => $userID,
]);
$row = $stmt->fetch(PDO::FETCH_ASSOC);
if($row){
echo $row['userFname'] . " " . $row['userLName'];
}else{
// PDO Prepaired prepair and execute
$navBarsql = 'SELECT * FROM user_login WHERE id = :id;';
$stmt = $pdo->prepare($navBarsql);
$stmt->execute([
'id' => $userID,
]);
$row = $stmt->fetch(PDO::FETCH_ASSOC);
// search user db for username
echo ucfirst($row['username']);
}
我见过一些疯狂的长SQL语句,似乎您可以在查询中执行此操作,但我的尝试都没有让我到达任何地方。
非常感谢所有的帮助!
答:
1赞
Barmar
11/7/2023
#1
使用 a 将它们合并到单个查询中。如果这些列中没有行,则为 .LEFT JOIN
user_details
NULL
$userID = $_SESSION['$userID'];
// PDO Prepaired prepair and execute
$navBarsql = 'SELECT ul.username, ud.userFname, ud.userLname
FROM user_login AS ul
LEFT JOIN user_details AS ud ON ul.id = ud.user_login_ID
WHERE ul.id = :user_login_ID;';
$stmt = $pdo->prepare($navBarsql);
$stmt->execute([
'user_login_ID' => $userID,
]);
$row = $stmt->fetch(PDO::FETCH_ASSOC);
if($row){
if ($row['userFname'] !== null) {
echo $row['userFname'] . " " . $row['userLName'];
} else {
echo ucfirst($row['username']);
}
} else {
echo "UserID $userID not found.";
}
评论
0赞
ChrisKsag
11/7/2023
我仍然遇到一个疯狂的错误。它告诉我未捕获的 PDOException:SQLSTATE[42S22]:未找到列:1054 “on 子句”中的未知列“ul.user_login_ID”
0赞
ChrisKsag
11/7/2023
我验证了所有拼写都是正确的。
0赞
ChrisKsag
11/7/2023
我想通了。它应该是 SELECT ul.username, ud.userFname, ud.userLName FROM user_login AS ul LEFT JOIN user_details AS ud ON ul.id = ul.id WHERE ul.id = :user_login_ID;
0赞
ChrisKsag
11/7/2023
如果您想更新您的答案,您 LEFT JOIN 的最后一行应该已 ul.id,因为user_login_ID是 ud 的一部分。非常感谢您的回答!大帮大忙!
1赞
user3783243
11/7/2023
如果有回报,也可以这样做。select case when ud.id is not null then concat(ud.userFname, ' ', ud.userLname) else ul.username end as name ....
echo ucwords($row['name']);
评论