gpt4 book ai didi

php - 使用php和mysql的随机数据

转载 作者:行者123 更新时间:2023-11-29 06:22:04 25 4
gpt4 key购买 nike

我的 mysql 数据库结构如下:

CREATE TABLE test (
id int(11) NOT NULL auto_increment,
title text NULL,
tags text NULL,
PRIMARY KEY (id)
);

字段标签上的数据存储为逗号分隔的文本,如 html、php、mysql、website、html 等...现在我需要创建一个数组,其中包含从随机记录中随机选择的大约 50 个标签。

目前我正在使用 rand() 从数据库中选择 15 个随机 mysql 数据,然后将 15 个记录中的所有标签保存在一个数组中。然后我使用 array_rand() 随机化数组并仅选择 50 个随机标签。

$query=mysql_query("select * from test order by id asc, RAND() limit 15");
$tags="";
while ($eachData=mysql_fetch_array($query)) {
$additionalTags=$eachData['tags'];
if ($tags=="") {
$tags.=$additionalTags;
} else {
$tags.=$tags.",".$additionalTags;
}
}

$tags=explode(",", $tags);
$newTags=array();
foreach ($tags as $tag) {
$tag=trim($tag);
if ($tag!="") {
if (!in_array($tag, $newTags)) {
$newTags[]=$tag;
}
}
}

$random_newTags=array_rand($newTags, 50);

现在我的数据库中有大量记录,因此; rand() 执行速度非常慢,有时甚至不起作用。那么谁能告诉我如何正确处理这种情况,以便我的页面正常工作。

最佳答案

永远不要ORDER BY RAND() - 这对性能来说非常糟糕。相反,在 PHP 中进行随机化。像这样,因为你的 ID 是自动递增的(可能不是最好的方法):

$count = mysql_fetch_assoc(mysql_query("select count(1) as count from test"));
$range = range(0, $count['count']);

$selection = array_rand($range, 50);
$sel_list = implode(',', $selection);

$query = mysql_query("select * from test where id in ($sel_list)");

顺便说一句,为什么要将标签放入字符串列表中,然后又分解该字符串?只需将它们从一开始就放入数组中即可。

关于php - 使用php和mysql的随机数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2676860/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com