我将保持简单易懂:
1)我有一个数据库2列-字和文本
2)每个单词有大约。60万行与之相关的文本
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行-它们应该是不重复的。
请帮忙好吗?
像这样:
$result = mysql_query("SELECT DISTINCT * FROM Data WHERE word='health' ORDER BY RAND() LIMIT 2000");
用MySQL比用PHP更有效地选择2000个随机行,如上所述
还要注意,SELECT DISTINCT
将只选择唯一的行,无论如何您可能都应该删除它。如果您指定列名而不是使用*
,那么您可以选择您想要唯一的列-尽管这也取决于您的表是如何构建的。
我认为这是你想要的方式
SELECT * FROM DataWHERE word='health' ORDER BY RAND() LIMIT 0,2000
这将给你2000个记录按任意随机顺序排序
您需要将行结果拆分为数组(因为它目前是一个字符串),然后您可以随机选择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()之前使用它。