【问题标题】:Selecting random records for use on a web page选择在网页上使用的随机记录
【发布时间】:2010-09-30 16:19:29
【问题描述】:

大家好,

我拥有一个网站我有一个名为“移动部分”的部分此部分包含许多类别(对象名称+图片+小描述和下载链接) 现在该部分被视为内部部分。我想查看第一页该部分的随机记录(我不知道喜欢 RSS,但不知道 Rss)显示 对象的名称及其所属的子类别及其图片(如果可能)。 我希望任何人都明白我想说什么。

这是我的网站HERE,这是内部页面的链接HERE,请检查“移动部分”的块它有点乱。 是否有任何脚本或技术可以以正确的方式查看它,如果可能的话,请向我展示示例

我正在使用 php 和 MySQL

提前感谢

【问题讨论】:

  • 没有必要道歉。我是英国人,我的英语很糟糕......
  • 您使用什么技术?由于页面扩展,我假设 PHP。您是从数据库(即 MySQL)生成内容吗?
  • 是的,我正在使用 php 和 MySQL

标签: php mysql web


【解决方案1】:

无论你做什么,都不要在 MySQL 中使用 ORDER BY RAND()。它不会扩展。是的,因为数据集很小,所以它似乎适用于少量行。 ORDER BY RAND() 需要全表扫描,这意味着您的表越大,查询所需的时间就越长。这将表现为“哎呀,网站似乎变慢了”......越来越慢......越来越慢......

如果您有一个 id 列恰好是一个整数并充当主键,您可以在查询之前在 PHP 中生成最大值,因为您实际上使用的是索引,所以速度会快得多。

示例可能类似于:

$random_row_id = rand(1, $max);

然后……

SELECT * FROM foo WHERE id = $random_row_id

您必须弄清楚如何获得 $max,但很可能您可以只获取最后一行 id。

这里有一点需要注意的是,如果您从表中删除了记录,则会出现“漏洞”,您可能会在其中要求不再存在的行。在这种情况下,您可以继续探索直到找到匹配项——它仍然比全表扫描快得多。

【讨论】:

    【解决方案2】:

    这个想法有点像大卫托马斯加西亚的抢断。你可以做的是在你的数据库中实现一个跟踪产品视图的字段(或者你可以避开这个并只跟踪购买),你可以从你的数据库中选择项目作为“畅销商品”或“热销商品”产品”然后显示在您的网站上。

    【讨论】:

      【解决方案3】:

      你真的希望它是随机的吗?很高兴在主页上最受欢迎,并且可能对您的访问者更加有用和信息丰富。

      也就是说,在 Microsoft SQL 中编写一个方法来做到这一点真的很容易:

      SELECT TOP 1 Name, Picture, Description, Link
      FROM Software
      WHERE Category = 'Mobile Section'
      ORDER BY NEWID()
      

      如果您不使用 Microsoft SQL,这里有一个site with random selectors 用于许多数据库。

      【讨论】:

      • 您应该使用类别页面中的相同代码来查看主页随机选择。 sy-stu.com/stu/prog.php?id=3 改变的只是数据库选择语句。使用一致的视觉体验很好。
      猜你喜欢
      • 1970-01-01
      • 2011-04-08
      • 1970-01-01
      • 2015-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多