MySQL从多个表中选择

时间:2011-12-14 22:46:36

标签: php mysql sql

我是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字段,以便我可以在页面上显示它?我只是不明白如何制定查询。我很感激任何帮助。谢谢。

3 个答案:

答案 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如何运作的视觉解释。