【问题标题】:Show unique random records within LIMIT显示 LIMIT 内的唯一随机记录
【发布时间】:2016-11-30 02:55:43
【问题描述】:

注意:可能重复的 mysql RAND() LIMIT 没有解决答案,因为在我的 sql 中,我的 ORDER BY 和 LIMIT 已经在一起了。

我想在一个范围内显示唯一的随机记录,但是当我在我的 sql 中使用 RAND() 时,它会从我的限制范围之外提取随机记录:

SELECT DISTINCT cases.caseid, cases.img, casetypes.casetypeid, cases.cost
FROM cases, casetypes
WHERE cases.caseid =  casetypes.caseid AND casetypes.mastercaseid = $mastercaseid
ORDER BY RAND()
LIMIT $lastrow, $perPage

编辑:根据以下答案,这对我有用:

SELECT * FROM (
SELECT DISTINCT cases.caseid, cases.img, casetypes.casetypeid, cases.cost
FROM cases, casetypes
 WHERE cases.caseid =  casetypes.caseid AND casetypes.mastercaseid = $mastercaseid
 LIMIT $lastrow, $perPage
 ) x
ORDER BY RAND()

【问题讨论】:

  • 为什么不在WHERE 子句中添加另一个条件以限制到某个范围? LIMIT 子句仍应返回您想要的记录数,假设有那么多可用记录。
  • mysql RAND() LIMIT的可能重复
  • @CoderofCode 我看到了那个帖子,但是我的 ORDER BY 和 LIMIT 已经在一起了。
  • @TimBiegeleisen 如何在 WHERE 子句中实现我的 LIMIT OFFSET?
  • 样本数据。示例输出。

标签: php mysql sql


【解决方案1】:

如果我正确理解您的问题,一种选择是进行子选择,以便您可以在下订单之前进行限制:

SELECT * FROM (

SELECT DISTINCT cases.caseid, cases.img, casetypes.casetypeid, cases.cost
FROM cases, casetypes
WHERE cases.caseid =  casetypes.caseid AND casetypes.mastercaseid = $mastercaseid
LIMIT $lastrow, $perPage
) x

ORDER BY RAND()

【讨论】:

  • 嗯,我不太明白这个。似乎对我不起作用。
  • 您能否将您的示例与我的特定 SQL 集成?我不知道我怎么能做到这一点,但也让我的专栏可以访问。
  • 我这样做了,但它对我不起作用。我收到此错误“#1248 - 每个派生表都必须有自己的别名”
  • @obreezy 您可以在派生表之后添加任何名称/字母。请再试一次。
  • 哦,好的,所以通过添加随机 x,您之前的工作方式:将 ORDER BY RAND() 放在子选择之外,将 LIMIT 放在里面!您可以更改它,我可以将其标记为正确答案。
猜你喜欢
  • 2014-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多