我有 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/