关于mysql:在已按值过滤的数据库子集中随机选择行 | 珊瑚贝

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)) {
     $images[] = (object) $row;
}

这工作正常。但是,我想随机选择一行(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/

微信公众号
手机浏览(小程序)

Warning: get_headers(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(): Failed to enable crypto in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(https://static.shanhubei.com/qrcode/qrcode_viewid_9436.jpg): failed to open stream: operation failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57
0
分享到:
没有账号? 忘记密码?