1

好吧,假设我的 MySQL 表设置了类似于以下内容的条目:

id  code            sold
1   JKDA983J1KZMN49  0
2   JZMA093KANZB481  1
3   KZLMMA98309Z874  0

我希望它在数据库中已经存在的范围内选择一个随机 ID(或者只是从 1-X 开始),然后将它分配给一个变量,以便我自己采取行动。因此,假设我们要选择一个未售出的代码(标记为 0 而不是 1),然后我们会选择它。

现在,它不必是 100% 随机的,它可以检查第一个是否已售出,如果没有,请继续。但我不能 100% 确定如何去做。片段将不胜感激,因为我可以自己轻松解决问题,我只需要一个例子来看看我要去哪里。

4

5 回答 5

2

如何使用 WHERE 和 ORDER BY RAND()

SELECT id, code
FROM tablename
WHERE sold = 0
ORDER BY RAND()
LIMIT 1
于 2013-04-19T04:10:42.360 回答
1

如果您不需要随机数,请不要使用它。它会对性能产生非常负面的影响。由于您在帖子中提到没有必要,因此我建议您使用上面 Ezequiel 的答案并放弃兰特。有关更多信息,请参阅以 PHP 随机顺序检索 MYSQL 数据的最有效方法

于 2013-04-19T04:14:02.610 回答
1

看来您的代码已经是随机的了,为什么不直接取第一项呢?如果您的数据库中有许多未售出的记录,则执行典型ORDER BY RAND()操作会损害数据库性能。

SELECT *
FROM codes
WHERE sold = 0
LIMIT 1
FOR UPDATE;

我还添加了FOR UPDATE以避免竞争条件,假设您正在使用交易,因为您稍后会更新记录(以实际出售它)。

于 2013-04-19T04:20:42.393 回答
0

你有没有尝试过

SELECT * FROM myTable WHERE sold = 0 ORDER BY RAND() LIMIT 1
于 2013-04-19T04:11:26.303 回答
0

添加ORDER BY RAND()SELECT查询的其余部分是完成此操作的最直接方法。

于 2013-04-19T04:13:54.067 回答