在PHP / MYSQL中计算过滤器记录

时间:2014-02-12 12:36:21

标签: php mysql sql magento

我有一个基于PHP / MYSQL的应用程序,其中有一个搜索区域,当您按日期搜索时,我会显示这些日期之间的酒店/酒店可用。我还有一些其他的过滤器,如区域,酒店等设施。

现在一切正常,但是cutomer现在想要显示每个过滤器的括号中的记录数。

我通过基于动态搜索用户为每个过滤器添加多个查询来尝试它,但这使我的页面性能变慢。因为如果我有5个过滤器,那么我将运行5个查询。

我在magento中看过这样的事情,它计算了过滤器的结果数量,如下图所示:

enter image description here

这样做的最佳方法是什么,我只需要一些逻辑和程序来解决这个问题。

发布整个表格结构很困难,但我假设它更短,所以你们可能有一些想法并建议一些解决方案:

表格是:

Properties - id, name
Factsheet_label - label_id, Name
Factsheet - id, label_id, prop_id, value (Yes, No)

我正在显示factheet_label表中的所有过滤器,然后我需要计算我拥有的属性的结果。

3 个答案:

答案 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