根据用户完成的搜索对搜索条件记录进行计数(MYSQL PHP)
作者:互联网
我有一个搜索表单,该表单根据可用性的特定日期提供在特定国家/地区度假的搜索属性.搜索部分有2个部分“基本搜索”和“ “高级搜索”.
基本搜索包含国家/地区下拉列表和日期字段.提前搜索,我们为酒店提供了多个过滤器,例如“卧室”(1间卧室,2间卧室等),然后是物业类型(公寓,别墅等)
我想显示带有“ 1卧室(23个属性)”之类的计数的搜索过滤器选项,其他搜索过滤器选项也是如此.
我正在使用php / mysql创建此应用程序,因此我首先想到的是对所有搜索过滤器运行多个查询,并从mysql获取COUNT结果并将其显示.我的页面上大约有10-12个不同的过滤器.另外,我还必须根据所选的所有搜索选项(基本和高级)动态显示计数记录.
在页面上运行多个查询将使其永久加载,并且由于多个查询加载而不会显示内容.有没有更好的&更快的方法吗?
请帮忙,谢谢!
解决方法:
我之前曾尝试过这样做,但它可能会变得非常缓慢,具体取决于您允许的过滤器数量和列出的酒店数量,更不用说您如何处理重复的酒店了.
最终,尽管您将只有很少的过滤器选项
>属性类型:在单独的表中对此进行规范化
>卧室:将其存储为tinyint或smallint(未签名),无法想象属性超过255个卧室,并且绝对不超过65k
>位置:在单独的表格中对其进行规范化,最好以树格式进行标准化,以确保关系被记录下来
>星级:可以将其存储为tinyint(未签名)
现在的问题是,如果某人对3个卧室以上的房间应用了一个过滤器,那么您仍然应该获得2个卧室,1个卧室的值,因为将过滤器改回该值会产生结果.
在一天结束时,我使用了一个非常大的内存表,一些用于构建WHERE和JOIN语句的逻辑以及一个单独的查询来对一组集合中的记录进行计数来解决这个问题.不过,这样做的目的与用户的假日搜索结果类似,因此数据被认为是完全瞬态的.为了您的目的,可以接受较小的内存表,但是原理相似.
标签:query-optimization,mysql,php 来源: https://codeday.me/bug/20191201/2082839.html