我有2张桌子:
第一张桌子users
:
+-------------------------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------------------+---------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| first_name | text | NO | | NULL | |
| age | int(11) | YES | | NULL | |
| settings | text | YES | | NULL | |
+-------------------------+---------+------+-----+---------+-------+
第二张表proposals
:
+---------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+---------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| from_id | int(11) | NO | | NULL | |
| to_id | int(11) | NO | | NULL | |
| status | int(11) | NO | | NULL | |
+---------+---------+------+-----+---------+----------------+
我需要1个 随机 从用户排它id
不是to_id
在proposals
我正在使用此sql(没有rand):
SELECT DISTINCT *
FROM profiles
WHERE
profiles.first_name IS NOT NULL
AND
NOT EXISTS (
SELECT *
FROM proposal
WHERE
proposal.to_id = profiles.id
)
LIMIT 0 , 1
表现还不错: 1 row in set (0.00 sec)
但是 性能却很糟糕:1 row in set (1.78 sec)
当我添加ORDER BY RAND()
到最后时
我的洞很大,users.id
不能使用类似的东西MAX(id)
我尝试设置random limit
,例如:
...
LIMIT 1234 , 1;
Empty set (2.71 sec)
但是也要花很多时间:(
如何获得性能users.id
不高的随机1个用户proposals.to_id
?
我认为我首先需要profiles
使用arand()
进行筛选,然后对其进行过滤,但是我不知道该怎么做。
我有两个问题解决方案。
1)具有随机ID,来自https://stackoverflow.com/a/4329447/2051938
SELECT *
FROM profiles AS r1
JOIN
(SELECT CEIL(RAND() *
(SELECT MAX(id)
FROM profiles)) AS id)
AS r2
WHERE
r1.id >= r2.id
AND
r1.first_name IS NOT NULL
AND
NOT EXISTS (
SELECT *
FROM proposal
WHERE
proposal.to_id = r1.id
)
LIMIT 0 , 1
2)与 ORDER BY RAND()
SELECT *
FROM
(
SELECT *
FROM profiles
WHERE
profiles.first_name IS NOT NULL
ORDER BY RAND()
) AS users
WHERE
NOT EXISTS (
SELECT *
FROM proposal
WHERE
proposal.to_id = users.id
)
LIMIT 0 , 1
第一个解决方案速度更快,但存在“漏洞id
”的问题,当您从头到尾解决问题时id
(用户可能比匹配的结果更早结束)
第二种解决方案速度较慢,但没有缺陷!
问题内容: 我看到了许多与此主题有关的主题,但在了解如何做到这一点上一直没有成功。 例如,如果我有此表: 并且我只想显示“一个”类中的X个随机行,我该怎么做? 注意 :这是一张大桌子,所以我不想使用。 问题答案: 如您所知,大多数人推荐的解决方案无法扩展到大型表。 我在《SQL反模式:避免数据库编程的陷阱》一书中介绍了该解决方案和其他解决方案。 如果要使用PHP进行此操作,则可以执行以下操作(未测
问题内容: 我正在努力寻找以下问题的最佳解决方案。假设我有一个像这样的表“ Table”: 我想为集合中的每个值选择:(’name1’,’name2’)10个随机唯一行。当然,可以像这样进行联合: 但是,如果我有100个唯一的名称,而我必须为其选择10个随机记录,则此查询将有点大。 提前非常感谢 问题答案: SQLFiddle演示
问题内容: 我正在使用PHP和MySQL创建一个简单的Web应用程序。在其中,我需要以随机顺序从表中随机选择一小组行。如何使用MySQL实现此类目标? 问题答案: SELECT * FROM table ORDER BY RAND() LIMIT 10;
例如,我有简单的DF: 我是否可以使用熊猫的方法和习惯用法,从“A”中选择“B”对应值大于50的值,以及“C”对应值不等于900的值?
问题内容: 我有桌子 我希望从此表中至少获得30个随机物品,其中总价格等于500,那么实现此目的的最佳方法是什么? 我看过了这个解决方案,它看起来也有类似的问题。MySQL选择3个随机行,其中三行之和小于值 我想知道是否还有其他更易于实施和/或更有效的解决方案 问题答案: 如果您的产品列表满足以下 假设, 则有解决方案: 您有所有价格在0.00到500.00之间的产品。例如。0.01、0.02等至
问题内容: 我有一个包含约50,000行的SQL Server表。我想随机选择大约5,000行。我想到了一种复杂的方法,用“随机数”列创建一个临时表,将我的表复制到该表中,遍历该临时表并用来更新每一行,然后从该表中选择随机数列< 0.1。我正在寻找一种更简单的方法,如果可能的话,可以在一个语句中进行说明。 本文建议使用该功能。这看起来很有希望,但是我看不到如何可靠地选择一定百分比的行。 有人做过吗