MySQL随机匹配2个表/查询中的行

Jiew Meng

如何随机匹配2个表中的行?

假设我有

Users
-----
u1
u2
u3

Items
-----
i1
i2

我想随机匹配/加入他们喜欢

Joined
------
u1   i2
u3   i1

请注意,结果表中的行是“随机”匹配。同样,大小是2个源表用户和项目中的较小者。

兰文

您希望基于不存在的关系(动态计算的“随机”值)将用户加入项目。

换句话说,对于每个用户,您都想选择随机项目。

假设主键序列中没有漏洞,则可以编写如下查询:

set @nb_items = select max(id) from items;

select users.id, items.id
from users
join items on items.id = floor(1 + rand() * @nb_items);

但是,此查询不会阻止为不同用户多次选择一项。

因此,解决此问题的另一种方法是实现这种“随机”关系。例如,您可以随机排列两个表,然后使用行号作为键将它们连接起来。这是查询,为清楚起见,使用了明确的表名:

set @i = 0;
set @j = 0;

select numbered_randomized_users.id, numbered_randomized_items.id
from (
  select id, @i := @i + 1 as row_number
  from (
     select id from users order by rand()
  ) as randomized_users
) as numbered_randomized_users
join (
  select id, @j := @j + 1 as row_number
  from (
    select id from items order by rand()
  ) as randomized_items
) as numbered_randomized_items using(row_number);

使用这种方法,结果集将仅是最小表的大小,而较大表中的某些行将被忽略。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

MySQL:更新2个表中所有与另一个查询匹配的行

来自分类Dev

MYSQL查询将列名匹配到另一个表中的行

来自分类Dev

MySQL在第一个查询中使用2个给定的匹配参数中的1个查询整个表

来自分类Dev

表A中的MySQL行与查询中的ID相匹配,其中ID与表B中的一个条件为true

来自分类Dev

从MYSQL中的2个表查询

来自分类Dev

MySQL查询以查找2个表之间的匹配项

来自分类Dev

从两个表进行SELECT查询,其中一条记录来自mysql中的匹配行

来自分类Dev

mysql查询使用2个表更新表中的数据

来自分类Dev

在 1 个查询中从 2 个表中选择行

来自分类Dev

php查询从表中获取行后得到一个随机值

来自分类Dev

在一个查询中从多个表中选择随机行

来自分类Dev

MySQL查询-帮助从2个表中获取数据

来自分类Dev

连接2个表Mysql的查询中的计算

来自分类Dev

连接2个表Mysql的查询中的计算

来自分类Dev

使用单个查询从2个表中删除行

来自分类Dev

MySQL选择行与另一个表中的两个匹配的联接行

来自分类Dev

连接两个表,然后从结果中随机获取n%的行。(查询http://data.stackexchange.com/中的表)

来自分类Dev

在具有500万行的表中对最长前缀进行匹配的最佳MYSQL查询

来自分类Dev

使用IN时,php mysql查询匹配表中的所有行

来自分类Dev

匹配查询中的2个where子句

来自分类Dev

匹配查询中的2个where子句

来自分类Dev

MySQL查询表中的随机唯一值

来自分类Dev

MYSQL从两个查询(不是表)中仅选择匹配的记录,然后按B查询对结果进行排序

来自分类Dev

优化当前的MySQL查询2个表

来自分类Dev

MySQL内部联接查询与2个表

来自分类Dev

优化当前的MySQL查询2个表

来自分类Dev

在MySQL中删除与另一个表中的两列匹配的行

来自分类Dev

在MySQL中删除与另一个表中的两列匹配的行

来自分类Dev

将行插入2个单独的表中的MySQL错误

Related 相关文章

  1. 1

    MySQL:更新2个表中所有与另一个查询匹配的行

  2. 2

    MYSQL查询将列名匹配到另一个表中的行

  3. 3

    MySQL在第一个查询中使用2个给定的匹配参数中的1个查询整个表

  4. 4

    表A中的MySQL行与查询中的ID相匹配,其中ID与表B中的一个条件为true

  5. 5

    从MYSQL中的2个表查询

  6. 6

    MySQL查询以查找2个表之间的匹配项

  7. 7

    从两个表进行SELECT查询,其中一条记录来自mysql中的匹配行

  8. 8

    mysql查询使用2个表更新表中的数据

  9. 9

    在 1 个查询中从 2 个表中选择行

  10. 10

    php查询从表中获取行后得到一个随机值

  11. 11

    在一个查询中从多个表中选择随机行

  12. 12

    MySQL查询-帮助从2个表中获取数据

  13. 13

    连接2个表Mysql的查询中的计算

  14. 14

    连接2个表Mysql的查询中的计算

  15. 15

    使用单个查询从2个表中删除行

  16. 16

    MySQL选择行与另一个表中的两个匹配的联接行

  17. 17

    连接两个表,然后从结果中随机获取n%的行。(查询http://data.stackexchange.com/中的表)

  18. 18

    在具有500万行的表中对最长前缀进行匹配的最佳MYSQL查询

  19. 19

    使用IN时,php mysql查询匹配表中的所有行

  20. 20

    匹配查询中的2个where子句

  21. 21

    匹配查询中的2个where子句

  22. 22

    MySQL查询表中的随机唯一值

  23. 23

    MYSQL从两个查询(不是表)中仅选择匹配的记录,然后按B查询对结果进行排序

  24. 24

    优化当前的MySQL查询2个表

  25. 25

    MySQL内部联接查询与2个表

  26. 26

    优化当前的MySQL查询2个表

  27. 27

    在MySQL中删除与另一个表中的两列匹配的行

  28. 28

    在MySQL中删除与另一个表中的两列匹配的行

  29. 29

    将行插入2个单独的表中的MySQL错误

热门标签

归档