0

銀行取引明細書 (説明、値、種類など) を購入者 (名前、住所) と照合するオンライン システムを作成しています。現在これを行っている方法についてフィードバックを求めています。

$array = array("keywords", "taken", "from", 
               "bank", "statements", "using", "explode", 
               "function", "using", "a", "space");

$i = 0;
$r = array(); //r = relevant

while($i<count($array)) {

  $keyword = $array[$i];

  $get = mysql_query("SELECT `id` FROM `users`, `addresses` 
                      LEFT JOIN `users`.`id` = `addresses`.`user` 
                      WHERE (`users`.`frame` LIKE '%$keyword%' 
                      OR `users`.`lname` LIKE '%$keyword%') 
                      OR ((`addresses`.`address` LIKE '%$keyword%' 
                      OR `addresses`.`town` LIKE '%$keyword%') 
                      OR (`addresses`.`county` LIKE '%$keyword%' 
                      OR `postcode`.`town` LIKE '%$keyword%'));");

  if(mysql_num_rows($get)) {
    while($fetch = mysql_fetch_array($get)) {
      list($var) = $fetch;
      push_array($r, $var);
    }
  }

  $i++;

}

//count the IDs that match within the relative array to see
//which is most relative to the search

実行時間を最小限に抑えるだけでなく、これを行うためのより良い方法はありますか? データベースは、完成時には数万になります。

4

1 に答える 1

1

各キーワードをユーザーに結び付けるキーワード テーブルを作成することをお勧めします。たとえば、次のようになります。

keywords (keyword, user) + UNIQUE(keyword, user)

keyword1   12
keyword1   14
keyword2   3

検索対象のデータからキーワード テーブルを設定すると、クエリはさらに最適化されます。

SELECT users.* 
FROM keywords 
INNER JOIN users ON users.id = keywords.user
WHERE keyword IN ('keyword1', 'keyword2')

もちろん、ユーザー テーブルまたはアドレス テーブルを変更 (挿入、更新、削除) するときは、このテーブルを維持する必要があります。

于 2012-07-02T14:06:04.087 に答える