在 PHP/MYSQL 中计算过滤器记录 [重复]

Posted

技术标签:

【中文标题】在 PHP/MYSQL 中计算过滤器记录 [重复]【英文标题】:Count filter records in PHP/MYSQL [duplicate] 【发布时间】:2014-02-12 12:36:20 【问题描述】:

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

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

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

我在magento中见过这样的东西,它计算过滤器的结果数,如下图所示:

最好的方法是什么,我只需要一些可以遵循的逻辑和程序来解决这个问题。

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

表格是:

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

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

【问题讨论】:

使用 mysql_num_rows 并给出特定的 category_id 来获取计数 这取决于您如何设置查询。如果您使用的是 GROUP BY,那么您可以使用 COUNT() 来获取该组的条目数。 显示表格结构,对您给出正确答案很有用 Someone did reply() 请不要重复问题。你有足够的代表来增加赏金。似乎您没有回答在另一个问题上帮助您的任何人,这是 1-rep 用户所期望的,但不是高代表用户。由于这个问题也缺少必要的技术细节,很遗憾我投了反对票。 【参考方案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

【讨论】:

这意味着计数记录,我需要运行一个单独的查询,对吧? 应该可以在一个存储过程中完成,但是如果没有有关您的数据库架构的更多信息,我真的无能为力。桌子是如何布置的? 我已经添加了一些有关表格的详细信息,请检查。 可以添加当前用来获取数据的select语句吗?根据您提供的信息,我仍然不确定数据在哪里。【参考方案2】:

每个 "SELECT *" 都可以是 "SELECT *, COUNT(*) ...." 然后你可以看到结果的 nr。 为了帮助您更多,我需要查看代码。

【讨论】:

【参考方案3】:

希望对你有帮助

SELECT  (
        SELECT COUNT(*)
        FROM   tab1
        ) AS count1,
        (
        SELECT COUNT(*)
        FROM   tab2
        ) AS count2
FROM    dual

【讨论】:

以上是关于在 PHP/MYSQL 中计算过滤器记录 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

php,mysql时间差问题

PHP MYSQL如何在选择时计算项目[重复]

sql 如何过滤重复记录

过滤掉多行中的mysql重复记录

PHP/MYSQL:更新数据不起作用请看一下[重复]

distinct mysql过滤重复记录