【问题标题】:SQL Result Random loop throughSQL结果随机循环
【发布时间】:2011-06-23 00:22:31
【问题描述】:

我有一个包含字段的 SQL 数据库。我可以通过以下方式获取该字段中的所有元素:

      $result=mysql_query($sql);
      while($row=mysql_fetch_array($result)){
         $ftype  =$row['ftype']; //name of field is 'ftype'
         print $ftype}  //do something  

我希望在每次打开/刷新页面时打印出一个随机元素。

知道结果是一个包含我想要的信息的数组,我想随机选择数组的一个元素。此外,如果数组中有 N 个元素,我想在第二次再次显示任何元素之前只选择一次所有 N 个元素。该过程不断重复。我知道如何在 java 或 python 中编写这样的代码,但我认为这不是我应该采用的方式。

我想我需要使用 javascript,但我只是不确定要使用什么技术。

更新:

Patrick 的想法似乎正是我想要的。我想我会分享我现在拥有的东西,也许你可以建议优化。我希望代码中的意图是显而易见的。

<?
session_start();
if (!isset($_SESSION['count']) || !isset($_SESSION['randomArray'])) {
      $count = 0;
      $randomArray = array();
      $sql="SELECT youtubeurl FROM Foodlist";
      $result=mysql_query($sql);
      while($row=mysql_fetch_array($result)){
           array_push($randomArray,$row['youtubeurl']);
      }
      shuffle($randomArray);
      $_SESSION['randomArray'] = $randomArray;
      $_SESSION['count'] = $count; 
} elseif ($_SESSION['count'] >= sizeof($_SESSION['randomArray'])){
   $_SESSION['count'] = 0;
   $randomArray = $_SESSION['randomArray'];
   shuffle($randomArray);
   $_SESSION['randomArray'] = $randomArray;
} else{
   $randomArray = $_SESSION['randomArray'];
   $count = $_SESSION['count'];
   echo $randomArray[$count];
   $_SESSION['count']++;
}
?>

【问题讨论】:

  • 我认为这不会涉及 Javascript!

标签: php sql random


【解决方案1】:

您可以在没有 Javascript 的情况下执行此操作,但是您需要打开/维护会话。

伪代码:

data = data_from_mysql()

choice = random.choice(data, exclude = SESSION['choices'])
SESSION['choices'].append(choice)

print choice

if len(SESSION['choices']) == len(data):
    SESSION['choices'] = []

【讨论】:

  • 我对会话一无所知。你能给我指出一些好的信息,以便我知道我正在寻找正确的东西吗?
  • 当然。 Check this out,这是 Sessions 的 PHP 手册。它们非常简单。
  • 您认为有更多的服务器端方法吗?除非必须,否则我真的不想创建 cookie。
  • 这几乎是服务器端的。会话不需要 cookie(尽管它们经常串联使用)。 session.start(); if(!is_set($_SESSION['choices'])) { $_SESSION['choices'] = array(); } 应该是您开始使用的全部内容。从那里,只需像访问任何其他数组一样访问 $_SESSION['choices']。
  • 我忘了我在 PHP 中有一分钟了。
【解决方案2】:

如果您想要随机结果,请让 dbms 处理它。将此添加到您的 sql 查询的底部。

ORDER BY RAND()
LIMIT 1

【讨论】:

  • 可以,但我对结果随机出现的次数有限制。一切都必须至少出现一次才能再次出现。我敢打赌你猜不出什么类型的内容需要这种结构! (提示:这是广告)
猜你喜欢
  • 2013-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-04
  • 1970-01-01
  • 2011-02-24
  • 1970-01-01
相关资源
最近更新 更多