Random row selection within a subset of a database which has been filtered by a value
目前我有一个名为 \\’images\\’ 的数据库,我根据 RAND() 和 ORDER 随机选择 2 行。
1
2 3 4 5 6 |
$query=“SELECT * FROM images ORDER BY RAND() LIMIT 0,2”;
$result = @mysql_query($query); while($row = mysql_fetch_object($result)) { |
这工作正常。但是,我想随机选择一行(randomrow1),然后通过 score > (randomrow1$score – 100) 创建图像数据库过滤器的子集
- 你能和我们分享更多关于图像的模式吗?有没有 id 属性?
- 文件名、分数、胜利、失败、image_id – 图像数据库中有 1000 行
- 警告:如果您只是学习 PHP,请不要学习过时的 mysql_query 接口。它很糟糕,已在 PHP 7 中删除。像 PDO 这样的替代品并不难学,像 PHP The Right Way 这样的指南有助于解释最佳实践。确保您的用户参数正确转义,否则您将遇到严重的 SQL 注入错误。
- 警告:使用 @ 运算符调用方法时不要抑制错误。如果出现问题,您想了解它并需要采取纠正措施,为用户显示有用的消息,记录问题,等等。如果您忽略试图指出严重问题的错误,它还会使此类调试问题变得更加复杂。
- 另一个建议,始终在循环外初始化变量,然后再在循环中使用它们。想想最坏的情况。如果你的 images 表是空的,你会在你的代码中得到一个未定义的 $images 变量。
首先,首先要更改您的原始代码,以便只得到一个答案。
1
2 3 |
$query=“SELECT * FROM images ORDER BY RAND() LIMIT 1”;
$result = @mysql_query($query); $image = (object) mysql_fetch_object($result) |
然后您需要提取分数,这将通过获取唯一图像对象的分数来完成,例如
1
2 |
$score1 = $image[“score”]
$id1 = $image[“id”] |
那你就得再次查询:
1
2 3 |
$query=“SELECT * FROM images WHERE score < #{$score1} + 100 AND score > #{$score1} – 100 AND id != #{$id1} ORDER BY RAND() LIMIT 1”
$result = @mysql_query($query) $image2 = (object) mysql_fetch_object($result) |
我的语法可能有点生疏,但这个通用答案应该适合你。
- 谢谢 Josh 会在 $image 中保存 2 个项目,还是第二个查询会覆盖第一个?
- 它会被覆盖,这是一个疏忽。现在应该修好了。
- 如果您使语法正常工作,则答案中的主要思想是有效的。但是请注意,为了满足要求,第二个查询中还需要另一个标准:…而不是与 randomrow1 相同
- 感谢您的帮助…您的回答会导致代码进一步出现问题。我将编辑最初的问题
- @JoshKopen 我已经编辑了原始问题,希望您能提供帮助
- @DenJJ对不起,我对问题的后半部分了解不多,祝你好运
- 谢谢乔希-感谢您的帮助
来源:https://www.codenong.com/44574181/