从搜索查询中获取唯一值以填充搜索过滤器选项

Posted

技术标签:

【中文标题】从搜索查询中获取唯一值以填充搜索过滤器选项【英文标题】:Get Unique Values From A Search Query To Populate Search Filter Options 【发布时间】:2019-12-06 22:17:00 【问题描述】:

我的网站上有一个产品搜索,它使用 sql 查询来获取结果。

例如:

$result=odbc_prepare($connection, "SELECT name, description, brand FROM item_catalog WHERE description LIKE $searchterm");
odbc_execute($result);
    $count = odbc_num_rows($result);
        if($count >= 1) 
            while($row = odbc_fetch_array($result)) 
                echo "<table cellspacing='7px' cellpadding='0' border='0'>";
                echo "<tr>";
                echo "<td style='vertical-align:top;line-height:0; display:none;'></td>";
                echo "<td>" . $row['name'] . "</td>";
                echo "<td>" . $row['brand'] . "</td>";
                echo "</tr>";
                echo "</table>";
            
        

我希望能够获取搜索结果并仅使用品牌字段中的 unique 值填充过滤器框。因此,用户可以根据品牌过滤结果。我只想将独特的品牌放在一个无序列表中,每个品牌旁边都有一个复选框。

我如何只抓住独特的品牌价值?我玩过 unique_array 但无法让它发挥作用。

请记住,除了品牌之外,还会有更多过滤器。我们可能要为其填充过滤器的 5-10 个字段。

【问题讨论】:

【参考方案1】:

您可以使用DISTINCT,如:

SELECT DISTINCT
       brand
       FROM item_catalog
       WHERE description LIKE ?;

但您能做的最好的事情就是规范化架构。在item_catalog 中拥有一个包含所有品牌的单独表和该表的外键。

【讨论】:

这将填充所有品牌的过滤器框。我只想要从用户搜索查询返回的独特品牌。 然后添加WHERE 子句。见编辑。另请注意,您应该更好地使用参数化查询。 我想我试图避免每次用户执行搜索时执行多个查询。特别是当我必须填充 5-10 个过滤器框时。 为什么?如果是因为性能,那么请记住,当模式设计和索引良好时,DBMS 专为此类任务而设计并且性能非常好。但这当然也取决于数据量和与 DBMS 的连接......

以上是关于从搜索查询中获取唯一值以填充搜索过滤器选项的主要内容,如果未能解决你的问题,请参考以下文章

如何从模型中获取唯一的选项列表以填充选择框

如何重构此搜索过滤器查询?

当搜索没有返回结果时,Select2 过滤器值消失

Drupal 7 - 暴露过滤器 - 全文搜索

搜索过滤器在单击搜索按钮之前不会获取数据

jQuery插件如何从插件内的函数中获取价值