搜索引擎,当用户想要“全部”时该怎么做

时间:2013-07-26 01:49:44

标签: php mysql

我是编程的绝对菜鸟,过去10天左右我一直在建立一个“买卖交易”网站。

无论如何,我已经到了能够让人们注册,发布广告并回复它们的地方......但是现在我想要一个可以搜索广告的页面。

搜索表单适用于3个字段,“制作”,“模型”和“口径”(网站用于枪支)

    <form action="" method="get" autocomplete="off">
I'm looking for a 
<input type="text" name="make" class="autosuggestmake" placeholder="Manufacturer"/>
        <div class="dropdown">
            <ul class="resultmake"></ul>
        </div>

<input type="text" name="model" class="autosuggestmodel" placeholder="Model"/>
        <div class="dropdown">
            <ul class="resultmodel"></ul>
        </div>
in
<select name="caliber" >
    <option value="*">(Caliber) Any</option>
    <option value=".177">.177</option>
    <option value=".20">.20</option>
    <option value=".22">.22</option>
    <option value=".25">.25</option>
</select>
<input type="submit" value="Search" />

这是我用这段代码发现的GET数据:

    $advert = new Advert;
    if (empty($_GET) === true){
$adverts = $advert->fetch_all();
    } else {
$search_make = $_GET['make'];
$search_model = $_GET['model'];
$search_caliber = $_GET['caliber'];

$adverts = $advert->fetch_results($search_make, $search_model, $search_caliber);
    }

我的fetch_results查询是这样的:

    class Advert {
public function fetch_results($search_make, $search_model, $search_caliber) {
    global $pdo;

    $search_caliber = mysql_real_escape_string($search_caliber);
    $search_make = mysql_real_escape_string($search_make);
    $search_model = mysql_real_escape_string($search_model);

    if (empty($search_make) === true){
        $search_make = "*";
    } 

    if (empty($search_model) === true){
        $search_model = "*";
    } 

    $query = $pdo -> prepare("SELECT * FROM `adverts` WHERE make = '$search_make' AND model = '$search_model' AND caliber = '$search_caliber'");
    $query -> execute();

    return $query -> fetchAll();
}

关于我的最后一个问题,有人告诉我开始使用PDO,所以我做了:)

我的问题是当某人填写我的表单上的make字段时,没有别的东西它什么都不会返回。我想如果获取变量是空白的我会追加一个*它会返回任何东西,但事实并非如此:(我一直在搜索,但我认为我的问题是我不知道正确的单词搜索找到治愈我的问题...

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:2)

我自己实施了一个网站,强烈推荐Sphinx。这就是craigslist使用的。它足够简单,满足您的需求,但又足以与您共同成长。

另一种选择是ElasticSearch,我被告知也非常好。

答案 1 :(得分:0)

您可以采取两种方法。一种是根据搜索条件在php中重写查询。

另一个是SQL解决方案:

SELECT *
FROM `adverts`
WHERE ('$search_make' = '' or make = '$search_make') AND
      ('$search_model' or model = '$search_model') AND
      ('$search_caliber' or caliber = '$search_caliber');

但是,如果表中的列上有索引,则此查询可能不会使用索引。编写php以仅包含带有值的子句可以创建更有效的查询。

答案 2 :(得分:0)

要么让你的用户浏览“全部” - 使用案例=某些收藏家寻找奇怪的物品。

或者您有一个“搜索依据”下拉菜单,让您的用户至少选择一个搜索类别。

如果所有搜索条件都为空白,您可以发送错误消息 - 但这会让用户感到烦恼,而不是通过一组搜索选项屏幕引导他们。