我有两个表,一个是我需要搜索的静态数据库,另一个是动态的,我将用它来搜索第一个数据库。现在我有两个单独的查询。首先在页面加载时,第二个表的值作为搜索项传递给第一个,我使用cURL“捕获”搜索结果。这是非常低效的,可能是非常错误的方法,所以我需要帮助来解决这个问题。目前页面(html,前端)需要40秒才能加载。
可能的解决方案:将其转换为功能,但仍会拨打许多电话。将表加载到内存中,然后运行查询并在完成后卸载缓存。使用正则表达式来帮助加快查询速度?可能加入?但我是一个菜鸟,所以我只能想象......
搜索脚本:
require 'mysqlconnect.php';
$id = NULL;
if(isset($_GET['n'])) { $id = mysql_real_escape_string($_GET['n']); }
if(isset($_POST['n'])) { $id = mysql_real_escape_string($_POST['n']); }
if(!empty($id)){
$getdata = "SELECT id, first_name, last_name, published_name,
department, telephone FROM $table WHERE id = '$id' LIMIT 1";
$result = mysql_query($getdata) or die(mysql_error());
$num_rows = mysql_num_rows($result);
while($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
echo <<<PRINTALL
{$row[id]}~~::~~{$row[first_name]}~~::~~{$row[last_name]}~~::~~{$row[p_name]}~~::~~{$row[dept]}~~::~~{$row[ph]}
PRINTALL;
}
}
HTML网页脚本:
require 'mysqlconnect.php';
function get_data($url)
{
$ch = curl_init();
$timeout = 5;
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
$getdata = "SELECT * FROM $table WHERE $table.mid != '1'ORDER BY $table.$sortbyme $o LIMIT $offset, $rowsPerPage";
$result = mysql_query($getdata) or die(mysql_error());
while($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
$idurl = 'http://mydomain.com/dir/file.php?n='.$row['id'].'';
$p_arr = explode('~~::~~',get_data($idurl));
$p_str = implode(' ',$p_arr);
//Use p_srt and p_arr if exists, otherwise just output rest of the
//html code with second table values
}
正如你所看到的,第二个表可能有也可能没有有效的id,因此没有结果,但第二个表是安静的大,总而言之,我正在阅读并输出15k +表格单元格。正如您可以从代码中看到的那样,我已经尝试过分页,但该解决方案并不符合我的需求。我必须在单个html页面中将客户端的所有数据都包含在内。所以请建议。
谢谢!
修改
第一张表:
id_row id first_name last_name dept telephone
1 aaa12345 joe smith ANS 800 555 5555
2 bbb67890 sarah brown ITL 800 848 8848
Second_table:
id_row type model har status id date
1 ATX Hybrion 88-85-5d-id-ss y aaa12345 2011/08/12
2 BTX Savin none n aaa12345 2010/04/05
3 Full Hp 44-55-sd-qw-54 y ashley a 2011/07/25
4 ATX Delin none _ smith bon 2011/04/05
所以第二个表是读取和显示的表,如果ID是正匹配则首先读取并显示信息。 ID在第一个中唯一,第二个具有多格式输入,因此它可以是ID,也可以不是ID,也可以是重复ID。希望这能让我更好地理解我需要的东西。再次感谢!
答案 0 :(得分:2)
一些事情:
为什么在查询中限制为1时使用while
和mysql_num_rows
?
$table
和其他这些事情在哪里设定?
缺少代码。
如果您为我们提供了两个表格的数据结构,我们可以帮助您解决问题,但现在您的设置方式,我甚至对它的工作感到惊讶。
您正在做的是,对于$table
中的每一行,mid!=1
您正在执行第二页的卷曲调用,该第二页再次获取ID和查询。这真的很糟糕,而且比它需要的更复杂。让我们看看你的桌子结构。
基本上你可以这样做:
select first_name, last_name, published_name, department, telephone FROM $table1, $table2 WHERE $table1.id = $table2.id and $table2.mid != 1;
摆脱卷曲,摆脱爆炸/爆炸。