mysql - 如何在 mysql 中加入另一个表中的随机行?

标签 mysql

我有 2 个表。

一个列表事物 - thing_id, thing_name, thing_status

其他表格列出了每个事物的属性。

attribute_id, attribute_thing, attribute_name, attribute_status

thing_id = attribute_thing

基本上我想抓取一个具有 thing_status = 1 的随机事物,然后我需要将它连接到一个具有 attribute_status = 1 的随机属性/p>

每个东西可能有0到N个属性,0个属性的东西还是要返回的。如果一个事物有超过 1 个属性,则应该返回一个随机的属性。

我有以下查询:

SELECT * FROM things
LEFT JOIN attributes ON thing_id = attribute_thing AND attribute_status = 1
WHERE thing_status = 1
GROUP BY thing_id
ORDER BY rand()
LIMIT 1

这里的问题是,它总是连接到第一个属性(该属性具有最低的 attribute_id。我需要随机选择一个。

删除 GROUP BY 子句有点管用,但是具有许多属性的东西更有可能被选中。因此,具有 30 个属性的事物被选中的可能性是具有 1 个属性的事物的 30 倍。我希望所有的事情都被平等对待。

最佳答案

如果您只需要属性中的 1 个整数列,您可以这样做:

 SELECT SUBSTRING_INDEX(GROUP_CONCAT(attributes.id ORDER BY RAND() SEPARATOR ',')),',',1)

...如果您需要更多,我看不到除了嵌套一些子查询之外的其他选择。

关于mysql - 如何在 mysql 中加入另一个表中的随机行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10987146/

相关文章:

mysql - 选择两列相等、一列不同的结果,并将不同结果串联在一行中

mysql - 如何在 Rails 中预先填充的数据库上运行测试?

mysql - 在 MySQL 中存储几个/多个不同类型的变量 - 推荐的方法是什么?

mysql - 选择包含输入数组所有值的字段

Python SQLAlchemy - "MySQL server has gone away"

php - 具有多个参数的mysql查询不起作用

mysql - 使用 Node 将 JSON 对象导入 mysql 的最快方法

php - 使用 php 我需要有 2 个不同的数据库连接

mysql - 将 NULL 值插入 INT 列

mysql - 频繁出现#126 - Incorrect key file for table '/tmp/#sql_4a05_0.MYI' 的解决方案是什么;尝试在mysql中修复它?