gpt4 book ai didi

php - 从数据库获取类别期间按类别过滤器计算行数

转载 作者:行者123 更新时间:2023-11-29 08:43:27 27 4
gpt4 key购买 nike

我的数据库中有两个表

table: products                   table: companies
+-----------+------------+ +------+------------+
| name | company_id | | id | name |
+-----------+------------+ +------+------------+
|Product 1 | 1 | | 1 | Company 1 |
|Product 2 | 1 | | 2 | Company 2 |
|Product 3 | 3 | | 3 | Company 3 |
|Product 4 | 1 | | 4 | Company 4 |
|Product 5 | 1 | | ... |
|Product 6 | 3 | +------+------------+
|Product 7 | 2 |
|... |
+-----------+------------+

现在我必须使用 HTML SELECT 元素以及表 companies 中所有公司的名称来制作 company-selector (按公司过滤产品)以及列表中公司名称后的 COUNT 个产品。

所以,我的目标是获得像这样的 SELECT 选项:

  • 公司 1 (4)
  • 公司 2 (1)
  • 公司 3 (2)
  • 公司 4 (0)

(注:括号内的计数来自上面的示例)

到目前为止我尝试过什么?

我之前使用mysql_*函数,后来使用mysqli程序模型。我可以手动执行此操作,使用一个公司查询和 while block 内的另一个查询来获取 COUNT 元素(按循环中当前公司的 ID 进行过滤)。现在我正在尝试使用 PDO 对象,这对我来说是新事物,而且我不太熟悉它。

问题

是否有可能通过一个查询(使用JOIN或其他东西)获得COUNT?如果没有,我如何使用我的 $dbPDO 对象在循环内进行查询(旧方式)?或者有其他方式吗?

我在这里查看了一些示例,但没有任何一个可以适应我的要求。也许我错过了一些东西,但使用 PDO 对我来说仍然很痛苦(我必须尽快学习)。

看看我自己的问题,我不认为这是什么难事,但最糟糕的是,我自己找不到解决方案

最后,我在 mysqli 中找到了解决方案,只是我不太喜欢它,并且认为有更简单的方法来完成这项任务!

我想这个question是我需要的东西,但仍然不明白回答中的查询。

到目前为止,我有这段代码,但不知道如何让它计算产品:

  $dbPDO = new PDO('mysql:dbname=comixdb;host=localhost', 'root', '');
$sel_cat = ''; # selector HTML
$sql = "SELECT * FROM categories ORDER BY name";
foreach ($dbPDO->query($sql) as $row) {
$sel_cat .= "<option value=\"{$row['id']}\">{$row['name']}</option>";
}
$sel_cat = "<select><option value=\"*\">All categories</option>$sel_cat</select>";

echo $sel_cat;

希望我已经足够澄清问题了。任何帮助,将不胜感激。

最佳答案

您需要的可以用 SQL 完成:

SELECT companies.name, SUM(IF(company_id IS NULL, 0, 1)) AS products
FROM companies
LEFT JOIN products ON (companies.id = products.company_id)
GROUP BY companies.id;

LEFT JOIN 确保选择所有公司,SUM 确保计数正确(简单的 COUNT 将返回 1)对于没有产品的公司)。

关于php - 从数据库获取类别期间按类别过滤器计算行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13148325/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com