wh_users 表有个 preferences 字段,是二进制内容,其实里面就是文本,下载下来之后就可以看得到。
想把其中 ID1 的这个 preferences 应用到这个表中的所有对象,请问这个该怎么做呢?
(刚开始用,遇到了问题,在谷歌上搜「 SQL 复制」,「 SQL 二进制 批量修改」,等等,这样的关键词完全找不到对应的方法,所以来请教,GUI 是 PHPMyAdmin)
情况是这样,这些用户是早期的,他们的消息推送都是关闭的,但现在我想默认开启,所以要批量的修改早期用户配置。
就是一个批量更改的过程,如果是数组,那么很简单一下就会想到用for,然后每个都赋值,但是SQL二进制文件就不懂了。
这个需求要尽快实现,自己又没有学过任何SQL语句,而且这个是二进制文件,不是文本,搜了一下也没发现有什么结果,所以就只能来问。
也学到了一些提问方法,在描述问题的时候,应该把整个背景也放在后面,否则的话是不容易理解的。
{
"notify_discussionRenamed_alert": true,
"notify_postLiked_alert": true,
"notify_discussionLocked_alert": true,
"notify_postMentioned_alert": true,
"notify_postMentioned_email": true,
"notify_userMentioned_alert": true,
"notify_userMentioned_email": true,
"notify_newPost_alert": true,
"notify_newPost_email": true,
"notify_userSuspended_alert": true,
"notify_userUnsuspended_alert": true,
"notify_selectBestAnswer_alert": true,
"notify_postReacted_alert": true,
"followAfterReply": true,
"discloseOnline": true,
"indexProfile": true,
"locale": "zh-hans"
}
1
pushback 2020-05-18 18:49:37 +08:00
update wh_users set preferences = (select preferences from wh_users where id = 1)
不过为啥要批量覆盖呢,这玩意都统一了,查指定为 1 的就行了阿 |
2
Mindjet OP @pushback 这是用户的配置文件,都指定同一个地址,会不会出现问题呢?比如其中一个用户改了之后,别的用户也全都改了,这个是不行的呀。
|
4
XanderChen 2020-05-18 19:09:26 +08:00
你在 wh_user 新增 user 的时候把这个 preference 接写到 wh_user 里面不就行了吗
我看你的描述,你是先新建了 100 个 user,然后突然想给这 100 个 user 添加一个 preference ? 还想要这个 preference 有一个统一的内容? 我总感觉这个操作有点问题。但是你要真想这样的话。 我觉得最简单的 for 循环加 preference 内容验证可以解决你的问题。 |
5
Mindjet OP @Mitt 我的需求不是统一地址,而是各自独立修改,这个早就想清楚了,现在补充到原来的位置,为了更明显现在补充到帖子上。
|
6
Mindjet OP @XanderChen 情况是这样,这些用户是早期的,里面有一个设置,本来是不默认勾选的,但是现在我想将这些早期用户的配置全部更改成勾选,以便核心的用户统一。所以就是一个批量更改的过程,如果是数组,那么很简单一下就会想到用 for,但我这个需求要尽快实现,自己又没有学过任何 SQL 语句,而且这个东西是二进制文件,不是文本,搜了一下也没发现有什么结果,所以就只能来问。
|
7
Juszoe 2020-05-18 19:47:17 +08:00 via Android
我知道你的意思了,是要将所有用户二进制配置中的某个勾选上吧,你这描述不太准确。
解决方案的话,因为它是非结构化数据,sql 可能无法实现,建议还是写个程序一个个修改吧 |
8
Mindjet OP @Juszoe
看来我的提问方法有很大的问题,回去反思一下,下次不会这样了 -_-|| *** 原来是这样,面对这个 SQL 还不能批量解决了,这个真的没想到,关键是这个二进制数据,实际上就是个文本文档,这就很迷惑了。 「写程序一个一个修改」中的「写程序」指的是什么? 用 JDBC 等工具写程序吗? |
10
Juszoe 2020-05-18 19:57:34 +08:00
@Mindjet #8 就是单独写个程序,连接数据库一通操作,读取需要修改的配置,程序将配置文件处理过后再将新配置文件 update 进数据库即可,这个需求不复杂,一个 for 循环应该搞定了,每个循环内处理一个用户。
|
11
Juszoe 2020-05-18 20:02:10 +08:00
如果是 json,SQL 是可以处理的,但是也是 String 方式存储的才可以(如 varchar ),搜索“sql 操作 json”就能看到
|
12
Mindjet OP 只要能连接数据库操作就可以,那这样的话应该是可以用 JDBC(Java Database Connectivity),像这样小的需求用 Java 是否大材小用了呢?
Python 也许是最佳选择,但没学过,感觉应该没什么难度,脚本语言可能挺简单的吧,花 2 小时还解决不了,考虑用 JDBC 解决。 |
13
Mindjet OP Windows 版 MySQL 正在安装,准备先从服务器搞下来(用户少非常方便就能弄下来吧),装在本地,用 Python 连接上,编程修改。
|
14
Mindjet OP @Juszoe 存储方式为「 blob 」,这是我用 Flarum 搭建了一个小论坛,这个就很纳闷了,不知道为什么明明是文本,还要用 blob 存起来,也许是设计失误。
|
15
tomczhen 2020-05-18 20:22:10 +08:00 via Android
估计是因为早期 MySQL utf8 解决方案里面有这种方式,存二进制可以不用转类型,毕竟还有个 utf8 mb4 。
|