我正在创建一个在线系统,将银行对账单(描述,价值,类型等)与购买者(姓名,地址)相匹配,并希望得到一些关于我目前这样做的反馈:
$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
有没有更好的方法来执行此操作以及将执行时间保持在绝对最小值?完成后,数据库将达到数千个。
答案 0 :(得分: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')
当然,您需要在更改用户或地址表(插入,更新,删除)时维护此表。