2011-08-22 10 views
0

私は2つのテーブルを持っています.1つは静的なデータベースで、もう1つは動的で最初のデータベースを検索します。今私は2つの別のクエリがあります。最初のページの読み込みでは、2番目のテーブルの値が検索語として最初のものに渡され、cURLを使用して検索結果を「取得」しています。これは非常に非効率的で、おそらくそれを行うには本当に間違った方法なので、私はこの問題を解決するのに助けが必要です。現在のページ(html、フロントエンド)は読み込みに40秒かかります。MySql:テーブル上で多数の検索クエリを実行する最良の方法

解決策:これを機能させても、それでも多くのコールが発信されます。テーブルをメモリにロードして、クエリを実行し、完了したらキャッシュをアンロードします。 regexpを使用してクエリを高速化するには?可能な参加ですか?

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 


    } 

も私だけ...

検索スクリプトを想像することができますので、しかし、私はnoobのですまたは有効なIDを持っていない可能性がありますので、結果はありませんが、2番目のテーブルは静かで大きなものですが、すべて私は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 

だから2番目の表は、最初の読みとの情報があれば表示され、読み込みと表示されます一つですIDは正の一致です。 IDは最初のもので一意であり、2番目のIDはマルチフォーマットの入力を持つため、IDと重複する可能性があります。これが、私が必要とするものをよりよく理解できることを願っています。再度、感謝します!

答えて

2

いくつかのこと:

  1. カールは、ここに完全に不要です。
  2. ご注文は、ご質問をかなり遅くします。
  3. IDのis_numericチェックをifにスローします。

whilemysql_num_rowsをクエリで1に制限しているのはなぜですか? $tableはどこにありますか? コードがありません。

問題の2つのテーブルのデータ構造を教えてもらえれば、クエリのお手伝いをすることができますが、これを設定した方法では、まったく動作していても驚いています。

$tableの各行には、mid!=1のIDを取得して再度クエリする2ページ目のカールコールが実行されています。これは実際には本当に悪く、はるかに複雑である必要があります。あなたのテーブル構造を見てみましょう。

基本的には行うことができます。

select first_name, last_name, published_name, department, telephone FROM $table1, $table2 WHERE $table1.id = $table2.id and $table2.mid != 1; 

は爆発/内破を取り除くため、カールを取り除きます。

+0

1)。爆笑、私は知っている!私はノブです。これが私ができる最高の方法です。 2)。私は注文をしなければなりません、このページはAJAXを介して動的な "追加"行機能を使用しています。ページにはうまく動作する他の要素があります。そして、ここで提供されるこのコードに影響を与える形や形にはありません。 3)。はい、コードはありませんが、問題のあるものはすべてここにあります。 4)。私は一度だけ使用していて、1行の返品を扱ったことがないので、私は代替案を知らない。そして、はいリミット1は物事をスピードアップするためにそこにあります。 5)。 IDは、XYZ12345パターンの英数字です。私は2番目のテーブルにクエリを送信する前にこれをregexpする必要がありますか? – Tumharyyaaden

+0

6)。そして、はい、私は2番目のテーブルの各行の最初のテーブルに1つのリクエストをしています。 7)。名前と電話を最初のテーブルから取得することは優先事項ではなく、最初のテーブルに存在するかどうかにかかわらず、2番目のテーブルの行を表示する必要があります。だからあなたの提案されたクエリが私の場合にはうまくいくとは思わない。 返信いただきありがとうございます。 – Tumharyyaaden

+0

テーブルを追加しました。もう一度見てください。 – Tumharyyaaden

関連する問題