Php 在第二个表上选择“带条件”,显示3个表中的信息
我试图根据第二个表的寄存器从一个表中进行选择 我用了4张桌子Php 在第二个表上选择“带条件”,显示3个表中的信息,php,mysql,Php,Mysql,我试图根据第二个表的寄存器从一个表中进行选择 我用了4张桌子 table Products Product_Id | Product_Name | Product_Value | Category_Id 1 | Ball | 10 | 1 2 | Pen | 2 | 2 3 | E
table Products
Product_Id | Product_Name | Product_Value | Category_Id
1 | Ball | 10 | 1
2 | Pen | 2 | 2
3 | Eraser | 1 | 1
table Categories
Category_Id | Category_Name
1 | Acessories
2 | Others
table Customers
Customer_Id | Customer_Name
1 | John
2 | Peter
table Sells
Sell_Id | Product_Id | Customer_Id | Sell_Date
1 | 1 | 1 | 2012-01-01
2 | 2 | 1 | 2012-01-02
所以我想做一个选择,向客户展示他购买的产品
像
约翰历史
Product Name Category Name Date
Ball Accessories 2012-01-01
Pen Others 2012-010
在期末考试中,我展示了3个不同表格中的信息
我尝试过使用内部连接和左连接,但没有成功
谢谢您的帮助。只需在所有这些表上使用JOIN,然后选择您想要的:
SELECT
p.Product_Name, c.Category_Name, s.Sell_Date
FROM
Customers cu JOIN Sells s ON cu.id = s.Customer_Id
JOIN Products p ON p.id = s.Product_Id
JOIN Categories c ON p.Category_Id = c.id
WHERE
cu.Customer_Name = "John"
JOIN
是否正确:
SELECT Products.Product_Name, Categories.Category_Name, Sells.Sell_Date
FROM Sells JOIN Products ON Sells.Product_Id = Products.Product_Id JOIN Categories ON Sells.Category_Id = Categories.Category_Id
WHERE Sells.Customer_Id = 1;
如果要为单个用户调出历史记录,可以使用WHERE子句:
WHERE Customers.Customer_Id = 1
或者
分解:您首先需要的是产品名称:
SELECT Product_Name FROM Products
我们如何获得类别?加入吧
SELECT Products.Product_Name, Categories.Category_Name
FROM Products JOIN Categories ON Products.Category_Id = Categories.Category_Id
接近!引入订单历史记录的时间:
SELECT Products.Product_Name, Categories.Category_Name, Sells.Sells_Date
FROM Products
JOIN Categories ON Products.Category_Id = Categories.Category_Id
JOIN Sells ON Sells.Sells_Id = Products.Product_Id
现在,我们可以输入名称,并过滤到John:
SELECT Products.Product_Name, Categories.Category_Name, Sells.Sells_Date
FROM Products
JOIN Categories ON Products.Category_Id = Categories.Category_Id
JOIN Sells ON Sells.Sells_Id = Products.Product_Id
JOIN Customers ON Sells.Customer_Id = Customers.Customer_Id
WHERE Customers.Customer_Name = 'John'
在你的脑海里,一步一步地走。在运行时从每个部分生成查询
既然你提到了。。。
LEFT JOIN
是处理丢失数据的方法。它从“left”表返回行,如果ON
子句与不匹配,则将NULL
放入“right”表的字段中
例如,如果John购买了一个没有类别的产品(Product.category\u Id
为NULL
),使用JOIN
将不会返回该购买记录,因为没有与category\u Id
NULL
匹配的类别。在这种情况下,您可以左连接类别
,并且在结果集中,类别名称
也将为空
。非常好,并且一步一步地解释。由于我的错误,我只使用了连接,而两个产品没有类别,因此结果是错误的,更改为左连接,并更改一点查询工作正常。。谢谢大多数答案都是正确的,但你的答案更完整。再次感谢@akatakritos
SELECT Products.Product_Name, Categories.Category_Name
FROM Products JOIN Categories ON Products.Category_Id = Categories.Category_Id
SELECT Products.Product_Name, Categories.Category_Name, Sells.Sells_Date
FROM Products
JOIN Categories ON Products.Category_Id = Categories.Category_Id
JOIN Sells ON Sells.Sells_Id = Products.Product_Id
SELECT Products.Product_Name, Categories.Category_Name, Sells.Sells_Date
FROM Products
JOIN Categories ON Products.Category_Id = Categories.Category_Id
JOIN Sells ON Sells.Sells_Id = Products.Product_Id
JOIN Customers ON Sells.Customer_Id = Customers.Customer_Id
WHERE Customers.Customer_Name = 'John'