我有 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
每个事物可能有 0 到 N 个属性,0 属性事物仍应返回。如果一个事物具有多个属性,则应返回一个随机属性。
我有以下查询:
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 倍。我希望所有的事情都一视同仁。