我目前正在为汽车经销商建立网站.我想允许用户优化类似于亚马逊或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之类的东西.
标签:search,count,mysql,php
来源: https://codeday.me/bug/20191101/1980952.html