使用php和/或jquery过滤mysql搜索结果

使用php和/或jquery过滤mysql搜索结果,php,jquery,mysql,filter,search-engine,Php,Jquery,Mysql,Filter,Search Engine,我为我的网站建立了一个简单的搜索引擎,它的工作方式是当用户输入关键字时,它查询数据库并显示结果 我的数据库表如下所示: game_id title developer publisher genre release_date platform rating image_location description 我想让用户在完成搜索后过滤结果,最好不要刷新页面(只编写了一个月的代码,但对jquery和ajax有基本的了解) 这是我的代码,我使用inc

我为我的网站建立了一个简单的搜索引擎,它的工作方式是当用户输入关键字时,它查询数据库并显示结果

我的数据库表如下所示:

game_id title   developer   publisher   genre   release_date    platform          
rating  image_location  description
我想让用户在完成搜索后过滤结果,最好不要刷新页面(只编写了一个月的代码,但对jquery和ajax有基本的了解)

这是我的代码,我使用include,这样搜索栏、搜索结果和查询页面就可以分开了

第1页搜索栏

<div id=\"top_search\">
            <form name=\"input\" action=\"search.php\" method=\"get\" id=\"search_form\">
            <input type=\"text\" id=\"keywords\" name=\"keywords\" size=\"128\" class=\"searchbox\" value=\"$defaultText\"> &nbsp;
            <select id=\category\" name=\"category\" class=\"searchbox\"> 
";
createCategoryList();
echo '
            </select> &nbsp;
            <input type="submit" value="Search" class="button" /> &nbsp;
            </form>
        </div>
        </header>
';

搜索
//过滤器导航将转到此处
第3页查询数据库

<?php 
include 'includes/connect.php';


function search_results($keywords){
$returned_results = array();
$where = "";

$keywords = preg_split('/[\s]+/', $keywords);
$total_keywords = count($keywords);

foreach($keywords as $key=>$keyword){
    $where .= "title LIKE '%$keyword%'";
    if($key != ($total_keywords - 1)){
        $where .= " AND ";
    }   
}
$results ="SELECT * FROM games WHERE $where ";
echo $results;
$results_num = ($results = mysql_query($results)) ? mysql_num_rows($results) : 0;

if($results_num === 0){
    return false;
}else{
    while($row = mysql_fetch_assoc($results)){
        $returned_results[] = array(
            'game_id' => $row['game_id'],
            'title' => $row['title'],
            'platform' => $row['platform'],
            'rating' => $row['rating'],
            'image_location' => $row['image_location'],
            'description' => $row['description'],
        );
    }
    return $returned_results;
}   
}

?>

你的方法是正确的。要根据出版商名称或开发者、流派、发布日期筛选搜索结果

1) 您可以有另一个“高级搜索”页面,在其中可以为这些属性插入HTML,只需调整查询的WHERE子句。因此,将有两个页面用于搜索-一个简单的搜索允许用户仅根据标题名称进行过滤,并表示类别,另一个高级搜索页面根据其他属性进行过滤
2) 您甚至可以选择在基本搜索页面本身上提供选项,以便根据其他参数进行过滤


您如何选择您的接口将是由您的需求规范强制执行的决定。请注意,在所有情况下,只有WHERE子句会发生变化。

您的方法是正确的。要根据出版商名称或开发者、流派、发布日期筛选搜索结果

1) 您可以有另一个“高级搜索”页面,在其中可以为这些属性插入HTML,只需调整查询的WHERE子句。因此,将有两个页面用于搜索-一个简单的搜索允许用户仅根据标题名称进行过滤,并表示类别,另一个高级搜索页面根据其他属性进行过滤
2) 您甚至可以选择在基本搜索页面本身上提供选项,以便根据其他参数进行过滤


您如何选择您的接口将是由您的需求规范强制执行的决定。请注意,在所有情况下,只有您的WHERE子句会更改。

谢谢,您的回答确实让我走上了正确的轨道。到目前为止,我只能排序,但我已经知道如何让过滤工作。我将在以后应用javascript,这样我就不必每次都访问数据库了。谢谢,你的回答让我走上了正确的轨道。到目前为止,我只能排序,但我已经知道如何让过滤工作。稍后我将致力于应用javascript,这样我就不必每次都访问数据库。
<?php 
include 'includes/connect.php';


function search_results($keywords){
$returned_results = array();
$where = "";

$keywords = preg_split('/[\s]+/', $keywords);
$total_keywords = count($keywords);

foreach($keywords as $key=>$keyword){
    $where .= "title LIKE '%$keyword%'";
    if($key != ($total_keywords - 1)){
        $where .= " AND ";
    }   
}
$results ="SELECT * FROM games WHERE $where ";
echo $results;
$results_num = ($results = mysql_query($results)) ? mysql_num_rows($results) : 0;

if($results_num === 0){
    return false;
}else{
    while($row = mysql_fetch_assoc($results)){
        $returned_results[] = array(
            'game_id' => $row['game_id'],
            'title' => $row['title'],
            'platform' => $row['platform'],
            'rating' => $row['rating'],
            'image_location' => $row['image_location'],
            'description' => $row['description'],
        );
    }
    return $returned_results;
}   
}

?>