在 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 中计算过滤器记录 [重复]的主要内容,如果未能解决你的问题,请参考以下文章