-2

我有 2 张桌子我需要他们有相同 id 的答案

  • 表1 e107_users:用户 ID、用户名、用户图像
  • 表 2 e107_extended:user_id、premium、电话

我只需要显示 5 个随机选择的用户,并让它仅在溢价时显示。

---------  ---------  ---------  ---------  ---------
* Phone *  * Phone *  * Phone *  * Phone *  * Phone *
* image *  * image *  * image *  * image *  * image *
* Name  *  * Name  *  * Name  *  * Name  *  * Name  *
*********  *********  *********  *********  *********

不应该重复,所以只能在user_id查询中看到同一个用户

4

1 回答 1

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_userstoe107_extended1: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,则只会选择一个)。

但是,这可能不会打乱扩展表中的元素。这意味着将始终选择相同的电话号码。但是,名称和图像将被洗牌。我不知道如何完全洗牌。

于 2013-02-27T23:17:30.447 回答