You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从两个不同数据集的表执行两条SELECT语句并关联user_id实现审核日志记录

解决方案

1. 单独执行两条SELECT获取结果

你可以直接分别执行两条查询语句获取独立的结果集,注意你原写法里存在两处问题:一是NOT user_id= 'user_id'是写死的字符串值,不符合业务筛选逻辑;二是直接拼接$admin_id变量到SQL会有SQL注入风险,推荐用预处理语句实现,PHP示例如下:

// 查询用户表,排除指定user_id
$userStmt = $pdo->prepare("SELECT * FROM users_account WHERE user_id != ?");
$userStmt->execute([$toBeExcludedUserId]);
$userResult = $userStmt->fetchAll(PDO::FETCH_ASSOC);

// 查询管理员表,排除指定admin_id
$adminStmt = $pdo->prepare("SELECT * FROM super_admin WHERE id != ?");
$adminStmt->execute([$adminId]);
$adminResult = $adminStmt->fetchAll(PDO::FETCH_ASSOC);

执行完成后$userResult和$adminResult就是两个表的查询结果。

2. 关联表实现审核日志展示需求

前置准备:新增审核日志表

你需要额外新建一张审核操作日志表,存储管理员的审核行为记录,建表SQL参考:

CREATE TABLE audit_log (
  log_id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '日志主键',
  user_id VARCHAR(64) NOT NULL COMMENT '被审核用户ID,关联users_account.user_id',
  admin_id INT UNSIGNED NOT NULL COMMENT '操作管理员ID,关联super_admin.id',
  audit_result TINYINT NOT NULL COMMENT '审核结果:1=通过,2=拒绝',
  created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '操作时间',
  FOREIGN KEY (user_id) REFERENCES users_account(user_id),
  FOREIGN KEY (admin_id) REFERENCES super_admin(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

关联查询获取带管理员信息的审核记录

需要展示审核日志时,用JOIN关联三张表即可同时拿到用户信息、管理员身份信息:

SELECT
  al.created_at AS audit_time,
  al.audit_result,
  ua.user_id,
  ua.user_fullname,
  ua.user_email,
  sa.username AS admin_name
FROM audit_log al
LEFT JOIN users_account ua ON al.user_id = ua.user_id
LEFT JOIN super_admin sa ON al.admin_id = sa.id
ORDER BY al.created_at DESC;

审核操作写入流程

管理员执行审核操作时,同步更新用户状态和写入日志即可,建议加事务保证数据一致性:

// 从登录态获取当前操作的管理员ID
$currentAdminId = $_SESSION['super_admin_id'];
// 接收参数:被审核用户ID、审核结果
$auditedUserId = $_POST['user_id'];
$auditResult = $_POST['result'];

$pdo->beginTransaction();
try {
  // 更新用户审核状态
  $updateUser = $pdo->prepare("UPDATE users_account SET isApproved = ? WHERE user_id = ?");
  $updateUser->execute([$auditResult, $auditedUserId]);
  // 写入操作日志
  $addLog = $pdo->prepare("INSERT INTO audit_log (user_id, admin_id, audit_result) VALUES (?, ?, ?)");
  $addLog->execute([$auditedUserId, $currentAdminId, $auditResult]);
  $pdo->commit();
} catch (\Exception $e) {
  $pdo->rollBack();
  // 自定义异常处理逻辑
}

注意事项

  • 不要使用SELECT *查询全字段,密码等敏感字段禁止带出,避免信息泄露
  • 所有涉及变量传入的SQL都必须用预处理语句,杜绝SQL注入风险
  • 多表写操作务必加事务,避免出现数据不一致问题

内容的提问来源于stack exchange,提问作者user17122787

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 16:24:03