使用PHP或JavaScript在客户端通过大量关键字逐个搜索大量数据
使用PHP或JavaScript在客户端通过大量关键字逐个搜索大量数据 表1-包含以10万为单位的数据(列:id、标题、说明) 表2-包含25k个关键字。(列:id,关键字) 现在,我想在表1中逐个关键字搜索数据,但我只想从表1中的2-3k数据中搜索(仅在标题、描述列中) 所以我计划,首先在一些对象(如Datatable、Array等)中获取2-3k的数据,然后在对象中逐个搜索关键字,并在任何关键字与表1匹配时搜索(仅在标题、描述列中)。MATCH[]数组中那些数据的对象存储ID和NOTMATCH[]数组中不匹配的数据存储ID 示例:表1(100000行) 示例:表2(26000行) 这是我的密码。我想对它进行一些改进,以便快速……或其他逻辑。和bootstrap datatable一样,客户端搜索过程是在搜索输入中输入任何关键字并显示结果时进行的使用PHP或JavaScript在客户端通过大量关键字逐个搜索大量数据,javascript,php,jquery,mysql,datatable,Javascript,Php,Jquery,Mysql,Datatable,使用PHP或JavaScript在客户端通过大量关键字逐个搜索大量数据 表1-包含以10万为单位的数据(列:id、标题、说明) 表2-包含25k个关键字。(列:id,关键字) 现在,我想在表1中逐个关键字搜索数据,但我只想从表1中的2-3k数据中搜索(仅在标题、描述列中) 所以我计划,首先在一些对象(如Datatable、Array等)中获取2-3k的数据,然后在对象中逐个搜索关键字,并在任何关键字与表1匹配时搜索(仅在标题、描述列中)。MATCH[]数组中那些数据的对象存储ID和NOTMATC
<html>
<body>
<?php
//this data from table1
$data = array(
"0"=>array(
"ID" => "1234",
"title" => "dell laptop",
"description" => "dell laptop i3 5000 xyz",
),
"1"=>array(
"ID" => "1238",
"title" => "hp machine",
"description" => "hp xyz abc utr",
),
"2"=>array(
"ID" => "1240",
"title" => "supply motor 1500",
"description" => "Decorative Watches",
),
"3"=>array(
"ID" => "1245",
"title" => "Deep Groove Drill Ball Bearing",
"description" => "Deep Hole Drill",
),
);
$MATCH =array();
$NOTMATCH =array();
$keywords =array('dell','watches'); //this data from table2
echo "<pre>";
for($i = 0; $i < count($data); $i++)
{
$ID = $data[$i]['ID'];
foreach($keywords as $value)
{
$pattern = "/$value/i"; //contains pattern
$dd = preg_grep($pattern, $data[$i]);
if($dd)
{
if(isset($NOTMATCH[$ID]))
{
unset($NOTMATCH[$ID]);
}
$MATCH[$ID] = $ID;
break 1;
}
else
{
$NOTMATCH[$ID] = $ID;
}
}
}
echo "****Found****<BR>";
print_r($MATCH);
echo "<BR>****NOT Found****<BR>";
print_r($NOTMATCH);
?>
</body>
</html>
因此,我如何才能按照我的计划编写代码。示例符合您的要求(obv您将适应您的代码):
函数myFunction(){
//声明变量
var输入、过滤器、表格、tr、td、i、TXT值;
输入=document.getElementById(“myInput”);
filter=input.value.toUpperCase();
table=document.getElementById(“myTable”);
tr=table.getElementsByTagName(“tr”);
//循环遍历所有表行,并隐藏与搜索查询不匹配的行
对于(i=0;i-1){
tr[i].style.display=“”;
}否则{
tr[i].style.display=“无”;
}
}
}
}
#我的输入{
背景图像:url('/css/searchicon.png');/*在输入中添加搜索图标*/
背景位置:10px 12px;/*定位搜索图标*/
背景重复:不重复;/*不要重复图标图像*/
宽度:100%;/*全宽*/
字体大小:16px;/*增加字体大小*/
填充:12px 20px 12px 40px;/*添加一些填充*/
边框:1px实心#ddd;/*添加灰色边框*/
页边距底部:12px;/*在输入下方添加一些空格*/
}
#我的桌子{
边框折叠:折叠;/*折叠边框*/
宽度:100%;/*全宽*/
边框:1px实心#ddd;/*添加灰色边框*/
字体大小:18px;/*增大字体大小*/
}
#我的表th,#我的表td{
文本对齐:左;/*左对齐文本*/
填充:12px;/*添加填充*/
}
#myTable tr{
/*向所有表行添加底部边框*/
边框底部:1px实心#ddd;
}
#myTable tr.header,#myTable tr:悬停{
/*将灰色背景色添加到表格标题并悬停*/
背景色:#f1f1;
}
第1行
第2排
结果
结果2
结果3
结果4
结果5
结果6
结果7
结果8
这是我想要的最好的代码,它将使用PHP数组在大约2000个数据中逐个搜索26000个关键字。它比通过查询在SQL表中搜索更快
您的查询是按ID选择的吗?或者你可以选择全部,然后用JS过滤?谢谢@SimoneRossaini的回复。首先,我将选择所有数据。如果符合您的网站,我可以发布一个简单的js筛选器,这样您是否拥有包含所有记录的所有表,并且筛选器将从您的输入中禁用td是的,我有两个包含所有记录的表显示我可以存储搜索中找到的数据的Id….(当Table1中的任何关键字匹配时,对象将这些数据的Id存储在match[]数组和不匹配数据ID存储在NOTMATCH[]数组中。)您可以使用AJAX进行控制输入,这样当用户在输入中写入例如“1”时,AJAX将执行您想要的操作。
id keyword
1 dell
2 Drill
<html>
<body>
<?php
//this data from table1
$data = array(
"0"=>array(
"ID" => "1234",
"title" => "dell laptop",
"description" => "dell laptop i3 5000 xyz",
),
"1"=>array(
"ID" => "1238",
"title" => "hp machine",
"description" => "hp xyz abc utr",
),
"2"=>array(
"ID" => "1240",
"title" => "supply motor 1500",
"description" => "Decorative Watches",
),
"3"=>array(
"ID" => "1245",
"title" => "Deep Groove Drill Ball Bearing",
"description" => "Deep Hole Drill",
),
);
$MATCH =array();
$NOTMATCH =array();
$keywords =array('dell','watches'); //this data from table2
echo "<pre>";
for($i = 0; $i < count($data); $i++)
{
$ID = $data[$i]['ID'];
foreach($keywords as $value)
{
$pattern = "/$value/i"; //contains pattern
$dd = preg_grep($pattern, $data[$i]);
if($dd)
{
if(isset($NOTMATCH[$ID]))
{
unset($NOTMATCH[$ID]);
}
$MATCH[$ID] = $ID;
break 1;
}
else
{
$NOTMATCH[$ID] = $ID;
}
}
}
echo "****Found****<BR>";
print_r($MATCH);
echo "<BR>****NOT Found****<BR>";
print_r($NOTMATCH);
?>
</body>
</html>
<?php
$data = array(); // Array value added from mysql database table 2000 rows (columns : ID, title, description)
$keywords = array(); // Array value added from mysql database table 26000 rows (column : keyword)
if (!$data)
{
echo "<script> alert('No Data available for Search...!');</script>";
exit();
}
$MATCHID =array();
$NOTMATCHID =array();
set_time_limit(0);// 0 = NOLIMIT
for($i = 0; $i < count($data); $i++)
{
$ID = $data[$i]['ID'];
foreach($keywords as $value)
{
$pattern = "/ ".$value." /i"; //contains pattern
$dd = preg_grep($pattern, $data[$i]);
if($dd)
{
if (in_array($ID, $NOTMATCHID))
{
$NOTMATCHID = array_diff($NOTMATCHID, array($ID));
}
$MATCHID[] = $ID;
break 1;
}
else
{
if (!in_array($ID, $NOTMATCHID))
{
$NOTMATCHID[] = $ID;
}
}
}
}
echo "<pre>";
echo "****Found IDs****<BR>";
print_r($MATCHID);
echo "<BR>****NOT Found IDs****<BR>";
print_r($NOTMATCHID);
?>