我有2个表我需要回答他们有相同的ID
e107_users
:user_id,user_name,user_image e107_extended
:user_id,premium,phone 我需要的只是展示5个随机选择的用户,并让它只显示溢价。
--------- --------- --------- --------- ---------
* Phone * * Phone * * Phone * * Phone * * Phone *
* image * * image * * image * * image * * image *
* Name * * Name * * Name * * Name * * Name *
********* ********* ********* ********* *********
user_id
不应重复,因此只能在查询中看到同一个用户一次
答案 0 :(得分:2)
SELECT * FROM e107_users u
JOIN e107_extended e ON u.user_id = e.user_id
WHERE premium = 1
ORDER BY RAND()
LIMIT 5
这应该可以解决问题。 ORDER BY RAND()
告诉MySQL按随机排序,这意味着它只会随机播放条目。然后LIMIT 5
将结果限制为5个第一个条目。在大多数情况下,这类似于“最大5”,“最小5”,但这里是“总随机集合中的前5个”,这意味着“随机5”。
我假设e107_users
不包含任何user_id重复项。对我来说没有多大意义。
我还假设e107_users
到e107_extended
是 1:1关系,但这可能会有所不同。但是,您的问题没有为此提供足够的信息。有人提到重复的ID,但我不知道它们可能出现在哪里。
如果不是1:1关系,您可以使用GROUP BY
:
SELECT * FROM e107_users u
JOIN e107_extended e ON u.user_id = e.user_id
WHERE premium = 1
GROUP BY u.user_id
ORDER BY RAND()
LIMIT 5
这将告诉MySQL使用u.user_id(user_id
表中的e107_users
)将元素组合在一起。因此,如果e107_extended
中有多个元素用于相同的user_id
,则只会选择一个元素。
但是,这可能不会改变扩展表中的元素。这意味着将始终选择相同的电话号码。但是,名称和图像将被洗牌。我不知道如何完全洗牌。