如何在MySql中打乱列

2024-01-12

在找不到任何符合我需求的内容后,我编写了这段代码来一致地对 mysql 中列的值进行洗牌。有一个更好的方法吗?

**Original table:**
+----+-----------+
| id | fname     |
+----+-----------+
|  1 | mike      |
|  2 | ricky     |
|  3 | jane      |
|  4 | august    |
|  6 | dave      |
|  9 | Jérôme    |
+----+-----------+

**Possible output:**
+----+-----------+
| id | fname     |
+----+-----------+
|  1 | dave      |
|  2 | jane      |
|  3 | mike      |
|  4 | ricky     |
|  6 | Jérôme    |
|  9 | august    |
+----+-----------+

DROP TEMPORARY TABLE IF EXISTS shuffle1;
DROP TEMPORARY TABLE IF EXISTS shuffle2;
CREATE TEMPORARY TABLE shuffle1 (id int(11) NOT NULL AUTO_INCREMENT, PRIMARY KEY (id), original_values varchar(255), key original_values(original_values) );
CREATE TEMPORARY TABLE shuffle2 (id int(11) NOT NULL AUTO_INCREMENT, PRIMARY KEY (id), original_ids int(11), key original_ids(original_ids) );
INSERT INTO shuffle1 (id, original_values) SELECT NULL, table1.fname FROM table1 ORDER BY rand();
INSERT INTO shuffle2 (id, original_ids) SELECT NULL, table1.id FROM table1;
UPDATE table1 SET table1.fname = (SELECT shuffle1.original_values FROM shuffle1 JOIN shuffle2 ON shuffle2.id = shuffle1.id WHERE table1.id = shuffle2.original_ids);

如果你不介意周围部分表数据无法处理(取决于表大小,预计有 50% 的行无法处理),这是一个解决方案:

原表

id  name
1   Some
2   Body
3   Once
4   Told
5   Me
6   The
7   World
8   Is
9   Gonna
10  Roll
11  Me
12  I 
13  Ain't
14  The 
15  Shapest
16  Tool
17  In
18  The
19  Shed
20  She
21  was
22  looking
23  kind
24  of
25  dumb
26  with
27  her
28  finger
29  and
30  her
31  thumb

Query:

SELECT new_id, name FROM (
    SELECT  new_id, name FROM (
        SELECT new_meme.id as new_id, original_meme.id as original_id, original_meme.name FROM meme original_meme
        JOIN meme new_meme ON new_meme.id <>  original_meme.id
        ORDER BY RAND()
    ) layer1
    GROUP BY layer1.new_id
) layer2 GROUP BY name

结果(当然每次运行都不同)

1   I 
2   In
3   Gonna
4   Ain't
5   The
6   her
7   finger
8   Some
9   dumb
10  She
15  Me
16  with
17  Told
18  and
19  World
21  Roll
22  The 
25  Tool
26  Shed
27  Is
28  Me
29  Sharpest
31  The

注意:您可能会发现查询非常慢, 这是因为它加入表两次,所以如果数据大小为1000,则需要处理1000 * 1000。

您可以通过更改来控制查询速度ON new_meme.id <> original_meme.id to ON new_meme.id BETWEEN original_meme.id - 5 AND original_meme.id +5(5可以改变),但它会降低随机性并且不适用于非数字id

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在MySql中打乱列 的相关文章

  • Python:如何使用生成器来避免 sql 内存问题

    我有以下方法来访问 mysql 数据库 并且查询在服务器中执行 我无权更改有关增加内存的任何内容 我对生成器很陌生 并开始阅读更多有关它的内容 并认为我可以将其转换为使用生成器 def getUNames self globalUserQu
  • Hibernate 对集合的查询过滤器

    我想执行以下查询 from Item i where i categoryItems catalogId catId 然而 这会产生以下异常 非法尝试取消引用集合 所以我用谷歌搜索 找到了这个 Hibernate 论坛帖子https for
  • 阻止注销页面后的后退按钮

    我有 php 注销页面 当用户单击注销链接时 请参阅此页面并重定向到索引页面 但是当单击后退按钮时 我会看到带有用户数据的上一页 当然 当我刷新页面时 我看不到以前的页面和数据 我在单击注销并单击后退按钮后检查了其他代码 drupal 但我
  • 如何正确转义mysql?

    我刚刚发现如果我写 select from tbl where name like foo 然后添加 foo 作为参数及其值 a 用户数据 它不会正确转义 我勒个去 它想要 a 即使我使用参数 我还是忍不住觉得我对 sql 注入持开放态度
  • 使用 PHP 的 MySQL 连接字符串

    我正在尝试通过本地计算机连接到托管在我的服务器上的数据库 我的服务器有cPanel 11 它是一个典型的共享服务器 由CentOS提供支持 安装了PHP和MySQL 准确地说 我在同一台服务器上持有经销商帐户 我想在不同帐户或域之间访问数据
  • Mysql 中 UNION 子句的替代方案

    我有两张桌子 表 a 表 b table a ID 1 2 3 4 5 7 table b ID 2 3 4 5 6 我必须得到这样的输出而无需UNION命令 ID 1 2 3 4 5 6 7 注意 我有一个联合解决方案 select fr
  • Apache、PHP 和 MySQL 可移植吗?

    我可以在外部硬盘上运行 Apache PHP 和 MySQL 吗 我需要这个 因为我在不同的地方工作 计算机 有时我没有安装和配置所有使用的应用程序 当然可以 XAMPP http www apachefriends org en xamp
  • 随机数但不重复

    我想生成一个小于 50 的随机数 但一旦生成该数字 我希望它不能再次生成 谢谢您的帮助 请参见 费舍尔 耶茨洗牌 http en wikipedia org wiki Fisher E2 80 93Yates shuffle public
  • Spark:Shuffle Write、Shuffle 溢出(内存)、Shuffle 溢出(磁盘)之间的区别?

    我有以下 Spark 工作 试图将所有内容保留在内存中 val myOutRDD myInRDD flatMap fp gt val tuple2List ListBuffer String myClass ListBuffer tuple
  • Mysql 将 int 转换为 MAC

    我有一些数据可以转换 其中有 2 列 其中一列有 IP 它包含整数值 我在 mysql 查询中使用了以下函数 是否有一个函数可以用来转换我的 mac 列 其中包含整数和数据类型是bigint to MAC地址 SELECT INET NTO
  • Flask-login:无法理解它是如何工作的

    我试图理解如何Flask Login https flask login readthedocs org en latest works 我在他们的文档中看到他们使用预先填充的用户列表 我想使用数据库存储的用户列表 但是 我不明白其中的一些
  • Bugzilla 中分离客户端的基本权限

    我正在尝试配置一个 Bugzilla 实例 这将允许我的客户登录并为其正在开发 维护的网站提交错误 例如 我创建了 2 个名为 TestProject TestProject2 的产品和一个名为 TestClient 的用户 我想要实现的是
  • 如何在 Play java 中创建数据库线程池并使用该池进行数据库查询

    我目前正在使用 play java 并使用默认线程池进行数据库查询 但了解使用数据库线程池进行数据库查询可以使我的系统更加高效 目前我的代码是 import play libs Akka import scala concurrent Ex
  • INSERT..RETURNING 在 JOOQ 中不起作用

    我有一个 MariaDB 数据库 我正在尝试在表中插入一行users 它有一个生成的id我想在插入后得到它 我见过this http www jooq org doc 3 8 manual sql building sql statemen
  • 一次从多个表中删除行

    我正在尝试将 2 个查询合并为一个这样的查询 result db gt query DELETE FROM menu WHERE name new or die db gt error result db gt query DELETE F
  • 仅当值发生更改时如何插入数据库?

    我需要更新 替换 MySQL 数据库中的字段 但前提是它们已更改 该表包含 ID 文本字段和更改日期 用户根据更改日期通过 ID 查询数据 即 如果该日期早于用户上次查询数据的时间 则他不想要它 仅当文本字段与具有相同 ID 的现有文本字段
  • 如何在mysql中选择具有相同值集的列?

    我的桌子是 patients pid name city disease did dname has disease did pid 我想列出具有相同疾病组的患者 pid 和 did 分别是患者和疾病表中的主键 并且是 has diseas
  • 不允许在 php 中连接到此 MariaDB 服务器

    我尝试在 php 中连接远程服务器数据库 但出现以下错误 Host xx xxx xx xx is not allowed to connect to this MariaDB server in 我的连接代码是这样的 servername
  • covertJSONtoSQL 在 NiFi 中返回空值

    我正在设计一项工作 使用以下命令将数据从 MySQL 中的数据库转移到另一个数据库 MySQL 执行SQL处理器随后将Avro转换为Json then 将Json转换为SQL then PutSQL如下流程图所示 将JSON转换为SQL返回
  • MySQL 通过 current_timestamp 选择上个月的数据

    直到今天 当我使用 MySQL 并需要对日期 时间执行操作时 我使用带有 unix 时间戳的 int 列 没有出现任何问题 但今天在阅读了一些指南后 我决定默认使用 current timestamp 测试时间戳列 所以我感兴趣如何按列选择

随机推荐

  • 在 macOS 中通过命令行与 Siri 交互

    我在手机和手表上使用 Siri 随时随地创建提醒 当我在办公室时 我不想使用 Siri 打扰安静 因此我通常使用与 提醒 应用程序集成的 Alfred 工作流程 或者直接使用 提醒 应用程序 然而 两者都有一个相当笨拙的界面 如果我可以在命
  • Zbar SDK - 缺少所需的架构 x86_64

    我在最近的 Xcode 5 1 中构建应用程序时遇到了一个问题 编译失败 并出现 架构 x86 64 的未定义符号 错误 我使用有效架构构建我的项目 armv7 armv7s 和 arm64 切换到最新的环境 Xcode 后 我在相同的架构
  • 随机化一个 BigInteger

    I m looking to randomize a BigInteger The intent is to pick a number from 1 to 8180385048 Though from what I noticed the
  • 运行 gulp 任务时如何解决“在 MakeCallback 中使用域属性已被弃用”警告?

    我正在使用带有 gulp 的节点来运行一些构建任务 直到几天前 这一切都还顺利 现在 我假设在升级 更新后 不确定是哪一个 我相信这是节点从 14 4 更新到 14 5 我不断收到此警告 DEP0097 DeprecationWarning
  • 使用 webpack、Threejs 示例和 TypeScript?

    我在将 Threejs 示例 如 EffectComposer 或 Detector 中的内容与 webpack 和 typescript 一起使用时遇到了很多麻烦 先把相关的 d ts文件全部存在并通过安装tsd 我的问题是让 webpa
  • Oracle:“= ANY()”与“IN ()”

    我刚刚在 ORACLE SQL 中偶然发现了一些我很好奇的东西 不确定其他中是否也有 我在这里作为维基询问 因为很难尝试在谷歌中搜索符号 我刚刚发现 当根据一组值检查一个值时 您可以执行以下操作 WHERE x ANY a b c 与通常的
  • 使用 OData 连接服务在 Blazor 客户端应用程序中使用 OData

    创建了 netstandard2 1 blazor Web 程序集项目 将 Odata Connected Service V 0 10 0 添加到同一项目 生成 OData 代理类 从 Razor 页面的 Task OnInitializ
  • 读取 Amazon Kinesis Firehose 流写入 s3 的数据

    我正在将记录写入 Kinesis Firehose 流 该流最终由 Amazon Kinesis Firehose 写入 S3 文件 我的记录对象看起来像 ItemPurchase String personId String itemId
  • document.execCommand 复制命令不起作用或其他解决方案?

    我正在做的是以编程方式从网页中选择所有文本 然后复制它 选择所有适用于execCommand但复制则不然 这是我的代码 ajax url url val type GET success function res result html r
  • Selenium Web 驱动程序等待很长时间

    我可以长时间等待 Selenium Web Driver 吗 尽管我可以像下面这样设置隐式等待命令 但它不会等待我给出的时间 driver manage timeouts implicitlyWait 5 TimeUnit MINUTES
  • C++/Win32:如何等待挂起的删除完成

    Solved 可行的解决方案 履行机构的答复 https stackoverflow com questions 3764072 c win32 how to wait for a pending delete to complete 37
  • 在 Powershell Cmdlet 中使用 Entity Framework Core?

    是否可以构建一个包含实体框架 Core 或 EF6 的 PowerShell cmdlet 以访问 SQL Server 数据库 我多年来一直在用 C 编写 cmdlet 但在过去的 coupla 日子里 由于似乎是程序集版本冲突 我在尝试
  • 在 C++ 中调用 std::sort 时使用 std::greater 的语法

    推荐的方式 例如 按降序对向量进行排序 https stackoverflow com questions 9025084 sorting a vector in descending order 对容器进行反向排序似乎是 std sort
  • Python,规则网格上的邻居

    假设我有一组 2D 坐标 表示 2D 规则网格的单元中心 我想为网格中的每个单元格找到每个方向上两个最近的邻居 如果分配给每个单元格和索引定义如下 那么问题就非常简单 idx cell idx N idy 其中 N 是网格中单元格的总数 i
  • 用于测试的 Java 编写的嵌入式 Kerberos 服务器

    有谁知道任何嵌入式 Kerberos 服务器 KDC KAdmin 它们是用 Java 编写的 并且可以仅在 JVM 进程中运行 例如 Hadoop minicluster 或嵌入式 LDAP 服务器 我的目标是让人们运行需要 Kerber
  • 当涉及到 pluck 时,to_sql 不起作用

    当我到to sql在以下查询中它工作正常 2 1 8 017 gt Task joins recurrence group recurrences id to sql gt SELECT tasks FROM tasks INNER JOI
  • XSLT:递归映射

    我是 XSLT 转换的新手 并且陷入了这种递归映射的困境
  • 如何强制两个 Java 线程在同一处理器/核心上运行?

    我想要一个不包含关键部分或类似同步替代方案的解决方案 我正在寻找类似于 Windows 中的 Fiber 用户级线程 的东西 操作系统管理哪些线程在哪个核心上处理 您需要将线程分配给操作系统中的单个核心 例如 在 Windows 上 打开任
  • 名词可数性

    有没有关于确定名词可数性的资源 要么用某种方法来解决这个问题 要么用一本字典来记录一个名词是否可数或不可数 我对这个名词是否可数不感兴趣 但更多的是它可能是可数的 例如 rice 可以变成rices 这意味着它可以是可数的 但在大多数情况下
  • 如何在MySql中打乱列

    在找不到任何符合我需求的内容后 我编写了这段代码来一致地对 mysql 中列的值进行洗牌 有一个更好的方法吗 Original table id fname 1 mike 2 ricky 3 jane 4 august 6 dave 9 J