我是MySQL的新手。我正在用PHP创建一个结帐页面。当用户选择他们想要购买的商品并单击“添加到购物车”时,会创建一个临时表,其中包含以下字段(表名为temp):
+--------------+-----------+------+-----+-------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+-----------+------+-----+-------------------+----------------+
| Cart_Item_ID | int(11) | NO | PRI | NULL | auto_increment |
| Item_ID | int(11) | NO | | | |
| Added_On | timestamp | YES | | CURRENT_TIMESTAMP | |
+--------------+-----------+------+-----+-------------------+----------------+
我只插入Item_ID字段,其中包含他们购买的每件商品的ID(我用表ID填充表单)。我想要做的是查找存储在库存表中的项目名称和价格。这是看起来的样子:
+--------------+----------------+------+-----+-------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+----------------+------+-----+-------------------+----------------+
| Inventory_ID | int(11) | NO | PRI | NULL | auto_increment |
| Item_Name | varchar(40) | NO | | | |
| Item_Price | float unsigned | NO | | 0 | |
| Added_On | timestamp | YES | | CURRENT_TIMESTAMP | |
+--------------+----------------+------+-----+-------------------+----------------+
那么我如何根据临时表中的Item_ID字段从Inventory表中提取Item_name和Item_Price字段,以便我可以在页面上显示它?我只是不明白如何制定查询。我很感激任何帮助。谢谢。
答案 0 :(得分:3)
它被称为JOIN
- 阅读更多here
SELECT Inventory.Item_Name, Inventory.Item_Price
FROM Inventory, temp WHERE Inventory.Inventory_ID = temp.Item_ID
答案 1 :(得分:1)
我的理解是临时表中的Item_ID引用了库存表中的Inventory_ID。基于此假设,您可以使用以下查询。
Select Item_Name, Item_Price from Inventory, Temp where Temp.Item_ID == Inventory.Inventory_ID
我想这就是你想要做的。
由于
答案 2 :(得分:1)
目前,你不能(除非Inventory_ID = Item_ID)
您需要的是一种将两个表连接在一起的方法。在这种情况下,如果Inventory_ID = Item_ID,则可以执行以下操作:
SELECT Item_Name,
Item_Price
FROM InventoryTable
INNER JOIN TempItemTable ON (InventoryTable.Inventory_ID = ItemTable.Item_ID)
如果要过滤特定项目,可以添加约束:
WHERE ItemTable.Item_ID = 27 --for example
这将连接库存表中的所有行以及Item表中的匹配行。
杰夫阿特伍德有一个great(IMO)关于JOIN如何运作的视觉解释。