【问题标题】:MySQL selecting random rows with one unique row within one queryMySQL在一个查询中选择具有一个唯一行的随机行
【发布时间】:2013-07-14 03:14:53
【问题描述】:

是否可以从一个表中选择 x 个随机行,其中一行必须是一个查询中的特殊行(因此具有特殊的字段值)?

基本上我要创建的是一个猜谜游戏,你有 x 数量的问题,有 x 数量的可能(复选框可选择)答案!

这就是我当前选择答案的方式...使用 2 个查询

$answers = 4; // This is the max amount of answers

// 只是为了测试question_id是手动设置的

$query = "SELECT * FROM `answers` WHERE `question_id` = 0 AND `correct` != 1 ORDER BY RAND() LIMIT " . ($answers - 1) . "";
$query = "SELECT * FROM `answers` WHERE `question_id` = 0 AND `correct` = 1 LIMIT 1";

“question_id”告诉我们正在讨论哪个问题,“正确”只是告诉该字段是否是正确答案

那么是否可以在一个查询中从表中选择 x 个随机行,其中行必须是“正确的行”?

【问题讨论】:

  • 您是否尝试过使用 UNION 子句?

标签: php mysql sql


【解决方案1】:

可以使用 UNION 吗?

$answers = 4;

$query = "SELECT * FROM `answers` WHERE `question_id` = 0 AND `correct` != 1 ORDER BY RAND() LIMIT " . ($answers - 1) . "";

$query .= " UNION ";

$query .= "SELECT * FROM `answers` WHERE `question_id` = 0 AND `correct` = 1 LIMIT 1";

只需一次查询,您就可以得到想要的结果

http://dev.mysql.com/doc/refman/5.0/en/union.html

【讨论】:

  • 该死,这给了我这个错误... UNION 和 ORDER BY 的错误使用
  • 哦,每个“查询”都需要括号
【解决方案2】:
$query = "SELECT * FROM answers WHERE ... whatever ... AND `question_id` IN (5, 9, 12, 16, 2)

因此,您首先找到行数,然后将正确答案的 ID 放入 WHERE IN 语句中。因为您知道自己想要的那个,所以您可以用表格中的随机 ID 将其包围,然后以随机方式呈现它们。

【讨论】:

  • 不,我不知道答案的 id,我唯一知道的是 question_id 和我想要回报的行数(答案)
  • 然后在存在的行数内生成随机数
  • 所以你想让我再做一个查询,检查存在多少行,然后......好吧,这并没有让它变成只有一个查询?
猜你喜欢
  • 2011-04-26
  • 2014-03-25
  • 2010-10-10
  • 1970-01-01
  • 2013-12-16
  • 1970-01-01
  • 1970-01-01
  • 2020-09-23
  • 1970-01-01
相关资源
最近更新 更多