[英]PHP MYSQL refine search multiple queries
我目前正在为汽车经销商建立一个网站。 我想允许用户优化类似于亚马逊或ebay的搜索结果。 通过点击缩小结果范围的能力会很棒。 问题是我这样做的方式现在有许多不同的查询需要完成每个COUNT总计。
因此缩小结果的主要方法是:
目前我每次加载此页面时都会进行5次查询,以便在传递设定值时获取结果数。
查询1:
SELECT vehicle_type, COUNT(*) AS total FROM inventory
[[ Already Selected Search Parameters]]
GROUP BY vehicle_type
ORDER BY vehicle_type ASC
查询2:
SELECT make, COUNT(*) AS total FROM inventory
[[ Already Selected Search Parameters]]
GROUP BY make
ORDER BY make ASC
查询3,4,5 ......
有没有办法在一个查询中执行此操作? 它更快吗?
您的查询似乎合理。
您可以使用UNION ALL
在单个查询中执行此操作:
SELECT 'vehicle_type' AS query_type, vehicle_type, COUNT(*) AS total
FROM inventory
...
GROUP BY vehicle_type
UNION ALL
SELECT 'make', make, COUNT(*) AS total FROM inventory ... GROUP BY make
UNION ALL
SELECT ... etc ...
这种性能优势不会很大。
如果您发现这些查询经常被解雇并且结果不会经常更改,您可能需要考虑缓存结果。 考虑使用像memcache这样的东西。
有几种方法可以按照数据仓库的方式对数据进行排名,但是您在搜索术语中尝试完成的操作称为facets。 一个真正的搜索引擎(将与您提到的网站一起使用)执行此操作。
许多站点使用Lucene(基于Java)搜索引擎和SOLR来完成您所指的内容。 有一个名为ElasticSearch的新解决方案,它具有RESTful API并提供方面,但您需要安装Java,ES,然后才能调用返回本机JSON的搜索引擎。
在MySQL中执行它而不需要这么多的连接可能需要额外的表和可能的触发器并且变得复杂。 如果汽车经销商不期望Cars.com流量(数百万/天),那么您可能会在实际需要之前尝试优化某些东西 。 您的递归查询可能足够快,并且您没有报告存在实际问题或瓶颈。
使用JOIN语法: http : //dev.mysql.com/doc/refman/5.6/en/join.html
或者,我认为你可以为此编写MySQL函数。 您将在哪里传递搜索参数。 http://dev.mysql.com/doc/refman/5.1/en/create-function.html
要找到更快的地方,您应该进行自己的速度测试。 这有助于我在没有加入的情况下更快地发现我的一些查询。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.