当前位置: 首页 > 知识库问答 >
问题:

如何在MySQL中将多行筛选器应用到一个连接的表中?[副本]

李新霁
2023-03-14

我正在一个项目中工作,我想展示产品,受到某些过滤器。假设我有以下2张表:

产品

id   name
--------------
1    'Product 1'
2    'Product 2'

筛选器

product_id   filter_id
----------------------
1            a
1            b
2            a

我正在尝试编写一个查询,该查询仅在设置了过滤器的情况下返回产品。因此,如果过滤器'a'是活动的,结果应该是乘积1和2,如果'a'和'b'是活动的,它应该只返回乘积1。

我试过:

SELECT p.id
FROM products p
LEFT JOIN filters f ON f.product_id = p.id
WHERE filter.id = 'a'
GROUP BY p.id

这将按预期返回产品%1和%2的ID。然而,当我尝试:

SELECT p.id
FROM products p
LEFT JOIN filters f ON f.product_id = p.id
WHERE filter.id = 'a' AND filter.id = 'b'
GROUP BY p.id

我希望它返回产品1的id,但它没有返回任何结果。如何重写查询,以便获得活动筛选器的产品ID?这能用MySQL单独完成吗,还是我必须用PHP循环遍历结果?

共有1个答案

陈瀚
2023-03-14

您的查询只需要稍作更改:使用OR而不是AND...将其更改为:

SELECT p.id
FROM products p
LEFT JOIN filters f ON f.product_id = p.id
WHERE filter_id in ('a','b')
GROUP BY p.id
HAVING COUNT(*) = no_of_filters
 类似资料:
  • 我有单独的MySQL数据库服务器。 如何将查询中的数据连接到这些服务器上的数据库,并将其显示在DBgrid上? [答复]http://dev.mysql.com/doc/refman/5.1/en/federated-storage-engine.html

  • 问题内容: 我有看起来像这样的数据: 流程将定期运行并为每个实体评分。该过程将生成数据并将其添加到得分表中,如下所示: 我希望能够为每个实体选择所有实体以及最新记录的分数,从而得到如下所示的一些数据: 我可以使用以下查询获取单个实体的数据: 但是我不知道如何为所有实体选择相同的内容。也许它正盯着我看? 非常感谢您抽出宝贵的时间。 感谢您的好评。我将花几天时间查看首选解决方案是否冒泡,然后选择答案。

  • 首先,我试图使选择所有复选框,如果我单击表头中的选择所有复选框,整个表行将选择并显示一个复选框反向消息,即我选择了多少复选框。这里的问题是,如果我单击select all复选框,反向消息不会显示楼上的表,即我选择了多少行。 其次,如果我从任何列中筛选任何数字,相同的数字将显示同一列中有多少行具有相同的数字。如果我选中了所有复选框,那么反向消息将显示我选中了多少行复选框。这里,问题是显示整个表行计数

  • 为了连接MySQL,我将mysql-connector jar添加到程序的类路径中。但当我试图运行并添加服务器数据库时,出现以下错误: sql异常:服务器显示多个时区,请做特定时区来利用服务器使用服务器时区配置。 要删除此错误并使用MySQL服务器,我应该怎么做???

  • 问题内容: 使用,我可以做类似的事情: 我的输出: 但是我只想要1行1列: 预期产量: 原因是我要从多个表中选择多个值,并且在所有联接之后,我得到的行比我想要的要多得多。 我在MySQL Doc上寻找了一个函数,但看起来不像或函数接受结果集。 那么,这里有人知道该怎么做吗? 问题答案: 您可以使用: 正如路德维希(Ludwig)在其评论中所述,您可以添加运算符以避免重复: 正如Jan在他们的评论中

  • 它重复显示每个房间类型的酒店名称匹配该酒店id,但我想显示所有房间类型的酒店名称一次。我怎样才能做到这一点? 谢谢。