我有一个基于PHP / MYSQL的应用程序,其中有一个搜索区域,当您按日期搜索时,我会显示这些日期之间的酒店/酒店可用。我还有一些其他的过滤器,如区域,酒店等设施。
现在一切正常,但是cutomer现在想要显示每个过滤器的括号中的记录数。
我通过基于动态搜索用户为每个过滤器添加多个查询来尝试它,但这使我的页面性能变慢。因为如果我有5个过滤器,那么我将运行5个查询。
我在magento中看过这样的事情,它计算了过滤器的结果数量,如下图所示:
这样做的最佳方法是什么,我只需要一些逻辑和程序来解决这个问题。
发布整个表格结构很困难,但我假设它更短,所以你们可能有一些想法并建议一些解决方案:
表格是:
Properties - id, name
Factsheet_label - label_id, Name
Factsheet - id, label_id, prop_id, value (Yes, No)
我正在显示factheet_label表中的所有过滤器,然后我需要计算我拥有的属性的结果。
答案 0 :(得分:1)
像这样的陈述
SELECT categoryId,CategoryName,COUNT(*) FROM Products GROUP BY CategoryId,CategoryName
将按类别对结果进行分组并返回每个结果,如此
CategoryId CategoryName Count
1 Living Room 4
2 Bedroom 2
修改强>
如果我正确理解你的桌子,这应该这样做。
SELECT F.id,F.label_id,F.prop_id,F.value,L.Name,
(SELECT COUNT(*) FROM Properties WHERE id = F.prop_id)
FROM FactSheet F
LEFT JOIN FactSheet_label L on L.label_id = F.Label_id
所有数据均来自Factsheet。相关标签是从factsheet_label中提取的。然后通过子查询
为每一行检索计数这是另一种方法,可能会或可能不会更高效。
SELECT F.id,F.label_id,F.prop_id,F.value,L.Name,P.count
FROM FactSheet F
LEFT JOIN FactSheet_label L on L.label_id = F.Label_id
LEFT JOIN (SELECT id,COUNT(*) count FROM Properties GROUP BY id) P ON P.id = F.prop_id
答案 1 :(得分:0)
每一个" SELECT *"可以是" SELECT *,COUNT(*)...."然后你可以看到结果的nr。 为了帮助您,我需要查看代码。
答案 2 :(得分:0)
希望这是有帮助的
SELECT (
SELECT COUNT(*)
FROM tab1
) AS count1,
(
SELECT COUNT(*)
FROM tab2
) AS count2
FROM dual