首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP :获取查询MySQL的新方法

PHP :获取查询MySQL的新方法
EN

Stack Overflow用户
提问于 2016-03-24 08:41:08
回答 3查看 59关注 0票数 1

我在SQL查询中有一个问题游戏测试,作为

  • 问题1至10
  • 我使用sql随机查询来选择问题。
  • 使用数组推送来保持前面的问题
  • 使用来自数组推送的sql查询查询来选择新问题(不再显示前面的问题)

第一个问题开始

  • 1:SELECT * FROM questions WHERE catid="9" ORDER BY RAND() LIMIT 0 , 1
  • 2: SQL查询获取id=2所以数组push = (2)

第二个问题开始(如果答案正确)

  • 1:SELECT * FROM questions WHERE catid="9" AND ( id <> "2" ) ORDER BY RAND() LIMIT 0 , 1
  • 2: SQL查询获取id=5所以数组push = (2,5)

第三个问题开始(如果答案正确)

  • 1:SELECT * FROM questions WHERE catid="9" AND ( id <> "2" AND id <> "5" ) ORDER BY RAND() LIMIT 0 , 1
  • 2: SQL查询获取id=1所以数组push = (2,5,1) ...问题开始(如果答案正确)
  • 1:.
  • 2:……

因此,我只想知道我是否有1000个问题,所以我的SQL查询将转到:

代码语言:javascript
复制
SELECT * FROM questions WHERE catid="9" AND ( id <> "2" AND id <> "5" AND id <> "1" AND .... AND id <> "999" ) ORDER BY RAND() LIMIT 0 , 1

对于页面处理来说,这应该是缓慢的吗?

如果速度慢,我们应该有另一种方法来处理这个查询吗?谢谢..。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-03-24 09:35:07

将上一个问题的id推送到数组。

代码语言:javascript
复制
$array[] = $previous_id;

选择一个在$array中没有id的随机问题。

代码语言:javascript
复制
$ids = join(',',$array);

$sql = "SELECT * FROM questions WHERE catid="9" AND id NOT IN ($ids) ORDER BY RAND() LIMIT 1";

在答案正确的时候重复这个过程。

编辑:,您也应该对输入进行适当的消毒以防止SQL injection

票数 0
EN

Stack Overflow用户

发布于 2016-03-24 09:00:12

首先获取整个问题数组,然后从中选择一个随机问题(使用一个随机数乘以数组长度),然后询问它--要么从数组中删除它,要么将它移动到另一个数组--可能是“questionsAsked”之类的?这样,您就不需要继续添加排它的列表了--您只需从其余的问题中选择?questionsAsked数组保存所问问题的列表。

票数 1
EN

Stack Overflow用户

发布于 2016-03-24 09:07:13

我还没有试过,但是您可以使用DISTINCT查询不同的值。

代码语言:javascript
复制
SELECT DISTINCT id, catid, ... FROM questions WHERE catid="9" ORDER BY RAND() LIMIT 10
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36196064

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档