【问题标题】:read random lines from a record MySQL-PHP从记录 MySQL-PHP 中读取随机行
【发布时间】:2011-11-30 05:12:36
【问题描述】:

我会保持简单易懂:

1) 我有一个包含 2 列的数据库 - 单词和文本

2) 每个单词有大约。与之相关的 600,000 行文本。

3) 我是一个 .net 的人,正在转向 php 和 mysql - 所以有点知识。

我的要求:

1) 我会通过表格传递单词

2) 表单将连接到数据库,并应显示这 600,000 行中的 2000 行,这些行应该是非重复的

我目前的进度:

<?php
$con = mysql_connect("localhost","text_minx","pwd");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("my_db", $con);

$result = mysql_query("SELECT * FROM Data
WHERE word='health'");

while($row = mysql_fetch_array($result))
{
  echo $row['lines'];
  echo "<br />";
}
?>

这显示了所有的行。我想要的是在一个可能的数组中读取这个 $row['lines'] 并从中随机选择 2000 行 - 它们应该是非重复的。

有什么帮助吗?

【问题讨论】:

    标签: php mysql database random


    【解决方案1】:

    类似这样的:

    $result = mysql_query("SELECT DISTINCT * FROM Data WHERE word='health' ORDER BY RAND() LIMIT 2000");
    

    如上所述,用 MySQL 选择 2000 行随机行比 PHP 更有效。

    还要注意SELECT DISTINCT 将只选择唯一的行,无论如何您都应该删除它们。如果您指定列名而不是使用 *,那么您可以选择您希望哪些列是唯一的 - 尽管这在一定程度上也取决于您的表的构建方式。

    【讨论】:

    • 你好,我不想要 2000 条记录。我想要一条记录中的 2000 行 :)。所以我得到了所有数据,并希望使用 PHP 从他们那里得到 2000 行。
    【解决方案2】:

    我认为这是你想要的方式

    从数据中选择 * WHERE word='health' ORDER BY RAND() LIMIT 0,2000

    这将为您提供 2000 条按任意顺序排序的记录

    【讨论】:

      【解决方案3】:

      您需要将您的行结果拆分为数组(因为它目前是一个字符串),然后您可以随机选择 2000 行。

      假设文本有像换行符一样的换行符,它看起来像这样:

      echo $row['lines']; //starts from this line of your code
      $data = explode("\n", $row['lines']);
      shuffle($data);
      $random_lines = array_slice($data, 0, 2000);
      

      不过,这并没有考虑到不重复。如果我正确理解您的需求,您可以在将 array_unique() 函数传递给 shuffle() 之前使用它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-02
        • 1970-01-01
        • 1970-01-01
        • 2018-11-19
        • 2020-09-05
        • 2021-12-26
        相关资源
        最近更新 更多