php - 根据用户完成的搜索计算搜索条件记录(MYSQL PHP)

标签 php mysql query-optimization

我有一个搜索表单,可以根据特定的可用性日期搜索特定国家/地区的假期属性。搜索部分有 2 个部分“基本搜索”和“高级搜索”。

基本搜索包含国家/地区下拉列表和日期字段。在提前搜索时,我们有多个过滤器可以过滤酒店,例如“卧室”(1 间卧室、2 间卧室等),然后是属性(property)类型(公寓、别墅等)

我想显示带有计数的搜索筛选器选项,例如“1 间卧室(23 个属性)”,其他搜索筛选器选项也是如此。

我正在使用 php/mysql 创建此应用程序,所以我首先想到的是对所有搜索过滤器运行多个查询并从 mysql 获取 COUNT 结果并显示它。我的页面上有大约 10-12 个不同的过滤器。此外,我还必须根据所有选择的搜索选项(基本和高级)动态显示计数记录。

在页面上运行多个查询将使其永远加载,并且由于多个查询加载而不会显示内容。有没有更好更快的方法来做到这一点?

请帮忙,谢谢!

最佳答案

我以前尝试过这样做,它可能会变得非常慢,具体取决于您允许的过滤器数量和您列出的酒店数量,更不用说您如何处理重复的酒店了。

尽管最终您将只有很少的过滤器选项

  • 属性类型:在单独的表中对其进行规范化
  • 卧室:将其存储为 tinyint 或 smallint(无符号),无法想象有超过 255 间卧室的特性,绝对不会超过 65k
  • 位置:在单独的表格中对其进行规范化,最好采用树格式以确保记录关系
  • 星级:这可以存储为 tinyint unsigned

现在您的问题是,如果有人向上应用 3 间卧室的过滤器,您仍然应该获得 2 间卧室、1 间卧室的值,因为将过滤器改回那个会产生结果。

在一天结束时,我使用一个非常大的内存表、一些构建 WHERE 和 JOIN 语句的逻辑,以及一个单独的查询来计算集合分组中的记录来解决这个问题。这是为了与用户假期搜索结果类似,因此数据被认为是完全短暂的。出于您的目的,一个小得多的内存表可能是可以接受的,但原理是相似的。

关于php - 根据用户完成的搜索计算搜索条件记录(MYSQL PHP),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9373774/

相关文章:

php - PDO 连接行为

mysql - Perl DBI mysql更新

MySQL:如何获得 View 的模块化,但较长代码的优化?

java - SQL 新手 - 查询的组织和优化

php - 根据通过复选框获得的表在 SQL 中存储数据?

php - 检查Mysqli php列中是否存在值

javascript - ERR_EMPTY_RESPONSE(每个打开的地方)

php - 从段落中找到匹配词的最有效方法

php - 使用变量变量时解析错误

php - 你能优化这个 PHP 循环查询代码吗?