Php mysql如何加入以获取数据

Php mysql如何加入以获取数据,php,mysql,sql,join,Php,Mysql,Sql,Join,可能重复: 我有三张桌子 属性 attr_id | attr_name 1 | oval< 2 | white 属性详细信息 attr_detail_id | attr_id | product_id 1 | 1 | 1 2 | 2 | 1 3 | 1 | 2 4 | 2 | 2 现在我想要椭圆形和白色的产品

可能重复:

我有三张桌子

属性

attr_id | attr_name 
1       | oval<
2       | white
属性详细信息

attr_detail_id | attr_id | product_id
1              | 1       | 1
2              | 2       | 1
3              | 1       | 2
4              | 2       | 2
现在我想要椭圆形和白色的产品。如何使用连接。

尝试以下方法:

SELECT DISTINCT
  p.product_id, 
  p.product_name 
FROM Product p 
INNER JOIN attr_detail ad ON p.product_id = ad.product_Id
INNER JOIN Attribute a    ON a.attr_id = ad.attr_id
WHERE a.attr_id IN(1, 2);
这将为您提供:

| PRODUCT_ID |           PRODUCT_NAME |
---------------------------------------
|          1 |              amazonite |
|          2 |                  agate |
|          3 | Product has only white |
| PRODUCT_ID | PRODUCT_NAME |
-----------------------------
|          1 |    amazonite |
|          2 |        agate |

注意:这将为您提供具有
白色
椭圆形
形状的产品名称。但是,如果只查找同时具有这两种形状的产品,则必须修改查询,如下所示:

SELECT DISTINCT
  p.product_id, 
  p.product_name 
FROM Product p 
INNER JOIN
(
  SELECT product_id
  FROM attr_detail
  WHERE attr_id IN(1, 2)
  GROUP BY product_id
  HAVING COUNT(DISTINCT attr_id) = 2
) ad ON p.product_id = ad.product_Id;
这将为您提供:

| PRODUCT_ID |           PRODUCT_NAME |
---------------------------------------
|          1 |              amazonite |
|          2 |                  agate |
|          3 | Product has only white |
| PRODUCT_ID | PRODUCT_NAME |
-----------------------------
|          1 |    amazonite |
|          2 |        agate |

请阅读更多关于
JOIN
s的信息。在这里,您可以找到有关以下内容的有用信息:

  • ,一本关于SQL基础知识的好书

对于我在第二个查询中所做的:

  SELECT product_id
  FROM attr_detail
  WHERE attr_id IN(1, 2)
  GROUP BY product_id
  HAVING COUNT(DISTINCT attr_id) = 2

这叫做。

在网上搜索
MySQL-JOIN
。在你的情况下,它会提供所有三种产品,但我想要椭圆形和白色的产品。非常感谢@mahmoud。你向我解释得很好,现在我明白我错过了什么。@abhi-欢迎你随时光临。更多解释请参见我的编辑:)。我第一次得到如此详细的问题答案。再次感谢@mahmoud为我解释加入。当然,我正在阅读所有。。