У меня есть две таблицы, одна - статическая база данных, в которой мне нужно искать, другая - динамическая, которую я буду использовать для поиска в первой базе данных. Прямо сейчас у меня есть два отдельных запроса. Сначала при загрузке страницы, значения из второй таблицы передаются в первую в качестве поискового запроса, и я «захватываю» результат поиска с помощью cURL. Это очень неэффективный и, вероятно, действительно неправильный способ сделать это, поэтому мне нужна помощь в устранении этой проблемы. В настоящее время загрузка страницы (html, front-end) занимает 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
}
Как видите, вторая таблица может иметь или не иметь действительный идентификатор, следовательно, никаких результатов, но вторая таблица очень большая, и в целом, я читаю и вывожу 15k + ячеек таблицы. И, как вы, вероятно, можете видеть из кода, я пробовал пейджинг, но это решение не соответствует моим потребностям Я должен иметь все данные на стороне клиента в одной HTML-странице. Поэтому, пожалуйста, совет.
Спасибо!
EDIT
Первый стол:
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
Таким образом, вторая таблица - это та, которая читается и отображается, сначала читается и отображается информация, если идентификатор соответствует положительному. Идентификатор уникален только в первом, второй имеет многоформатный ввод, поэтому он может быть или не быть идентификатором, а также может быть дублированным идентификатором. Надеюсь, что это дает лучшее понимание того, что мне нужно. Еще раз спасибо!