我在页面上创建了一个简单的搜索框,用户可以使用PHP键入关键字以查找某些项目的照片。我正在使用MySQL数据库。我修剪结果并仅显示10以使加载更快,但是某些关键字组导致浏览器在IE和Firefox上都挂起。当这种情况发生在IE上时,我可以在10个结果之外看到照片的轮廓(只是轮廓),右上角有一个“X”标记,类似于加载照片时,网页上不存在照片,即使我编写代码只显示10个结果。该数据库有超过10,000个条目,我想也许它正试图在数据库中显示整个照片集。以下是我正在使用的一些代码。
我正在使用下面的函数来创建查询。 $ keyword是用户输入的关键字数组。
function create_multiword_query($keywords) {
// Creates multi-word text search query
$q = 'SELECT * FROM catalog WHERE ';
$num = 0;
foreach($keywords as $val) { // Multi-word search
$num++;
if ($num == 1) {
$q = $q . "name LIKE '%$val%'"; }
else {
$q = $q . " AND name LIKE '%$val%'";}
}
$q = $q . ' ORDER BY name';
return $q;
//$q = "SELECT * FROM catalog WHERE name LIKE \"%$trimmed%\" ORDER BY name";
}
显示结果。 MAX_DISPLAY_NUM是10。
$num = 0;
while (($row = mysqli_fetch_assoc($r)) && ($num < MAX_DISPLAY_NUM)) { // add max search result!
$num++;
print_images($row['img_url'], '/_', '.jpg'); // just prints photos
}
我是PHP的新手,但我似乎无法发现我的代码有任何问题。也许我编写这些算法的方式不适合PHP或MySQL?你能帮助我吗?我可以根据需要发布更多代码。 TIA !!
答案 0 :(得分:5)
不要将您的搜索结果限制在PHP中,请使用LIMIT
关键字将其限制在SQL查询中。
如:
select * form yourtable where ... order by ... limit 10;
顺便说一句,那些LIKE '%something%'
可能很贵。也许你应该看看Full text indexing and searching。
如果您想显示More...
链接或类似内容,一种方法是limit
您的查询为11,只显示前十个。
答案 1 :(得分:3)
除了查询中的LIMIT
之外,我还会查看mysql full text search(如果您的表格具有MyISAM格式)。
答案 2 :(得分:2)
为什么不使用MySQL来限制返回的搜索结果数量?
答案 3 :(得分:1)
为您的查询添加LIMIT。
您正在从DB中检索所有行(从DB到服务器的大量字节),然后您将过滤前10行。
试
$q = $q . ' ORDER BY name LIMIT 10';
答案 4 :(得分:0)
LIKE
也很慢。您应该首先尝试使用Flickr。如果您的网站看起来仍然很慢,那么还有其他一些非常快速(呃)/流行的替代方案:
您需要学习/安装这些技术,这有点令人讨厌,但在需要时非常值得投资。