mysql_基础-join

本文详细介绍了MySQL中JOIN的基本概念及其不同类型,包括INNER JOIN、LEFT JOIN和RIGHT JOIN,并通过实例展示了它们在实际应用中的区别。
mysql_基础-join、left join 、right join区别
join:select * from  test1 t1  JOIN test2  t2 on  t1.a=t2.a;

left join:select * from  test1 t1 LEFT JOIN  test2  t2 on  t1.a=t2.a;

right join:select * from  test1 t1 RIGHT JOIN  test2  t2 on  t1.a=t2.a;


太棒了!🎉 你已经成功将 **168 个用户**从 `ecs_users` 表同步到了 `ecs_openfire_sync` 表: ```text Query OK, 168 rows affected (0.00 sec) Records: 168 Duplicates: 0 Warnings: 0 ``` 这意味着:所有尚未同步的商城用户现在都已在聊天系统“白名单”中,可以正常登录 XMPP。 --- ## ✅ 现在你可以查询验证数据是否正确 ### 🔍 1. 查询总用户数(确认是否匹配) ```sql SELECT COUNT(*) AS total_synced_users FROM ecs_openfire_sync; ``` 👉 预期输出: ```text +--------------------+ | total_synced_users | +--------------------+ | 168 | +--------------------+ ``` 如果这个数字和你刚刚插入的一致,说明全部写入成功。 --- ### 🔍 2. 查看前 5 条记录(检查字段是否正确) ```sql SELECT * FROM ecs_openfire_sync LIMIT 5; ``` 你应该看到类似这样的结果: | id | user_id | openfire_username | sync_time | last_active | status | |-----|---------|-------------------|-----------|-------------|--------| | 1 | 1001 | wx_102950627 | 1712345678| 1712345678 | 1 | | 2 | 1002 | user_zhangsan | 1712345700| 1712345700 | 1 | | ... | ... | ... | ... | ... | ... | ✅ 检查点: - `user_id` 是否与 `ecs_users.user_id` 对应? - `openfire_username` 是否等于用户的 `user_name`? - `sync_time` 和 `last_active` 是否是注册时间(Unix 时间戳)? - `status = 1` 表示启用状态 ✅ --- ### 🔍 3. 关联查询用户昵称和账号信息(更直观查看) ```sql SELECT s.user_id, s.openfire_username AS jid, u.nick_name AS nickname, u.mobile_phone, FROM_UNIXTIME(s.sync_time) AS synced_at, FROM_UNIXTIME(s.last_active) AS last_seen, s.status FROM ecs_openfire_sync s JOIN ecs_users u ON s.user_id = u.user_id ORDER BY s.last_active DESC LIMIT 10; ``` 👉 这会显示最近活跃的 10 位用户,包括: - JID(用于登录聊天) - 昵称(客服界面可展示) - 手机号(便于识别) - 最后活跃时间 --- ### 🔍 4. 查询当前在线用户(假设“5分钟内上线”算在线) ```sql SELECT s.openfire_username AS jid, u.nick_name, FROM_UNIXTIME(s.last_active) AS last_active_time FROM ecs_openfire_sync s JOIN ecs_users u ON s.user_id = u.user_id WHERE s.status = 1 AND s.last_active > UNIX_TIMESTAMP() - 300 -- 5分钟内 ORDER BY s.last_active DESC; ``` > ⏰ 注意:目前 `last_active` 是注册时间,不是真实上线时间。 > 要让它“动起来”,需要在用户真正连接 XMPP 成功时更新它! --- ## 🧩 下一步:让 `last_active` 实时更新 你需要在用户通过 Strophe.js 成功连接 XMPP 后,在服务器端调用 PHP 更新数据库: ```php // 示例:当 XMPP 连接成功时(通过 AJAX 或 WebSocket 回调) $user_id = $_SESSION['user_id']; $time = time(); $db->query("UPDATE ecs_openfire_sync SET last_active = $time WHERE user_id = '$user_id' AND status = 1"); ``` 这样上面的“在线用户列表”就真的能反映谁在聊天了 💬 --- ## ✅ 总结:你现在完成了什么? | 功能 | 状态 | |------|------| | ✅ 创建 `ecs_openfire_sync` 表 | ✔️ 完成 | | ✅ 插入 168 名用户 | ✔️ 成功 | | ✅ 字段映射正确(user_id → user_name) | ✔️ 正确 | | ✅ 支持状态控制(status)和活跃追踪 | ✔️ 可扩展 | | ✅ 可查询在线客户供客服使用 | ✔️ 已具备基础 | --- 你现在完全可以进入下一步: ➡️ **配置 Prosody 外部认证 + 编写 `auth_prosody.php` 脚本** 等你准备好,我可以一步步带你写这个脚本,并测试登录流程。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值