2012-01-03 52 views
1

我想从我的数据库中获取一些与您在超市购买的收据类似的数据(只是一个适合我实际情况的例子)。 例如,您将获得2个(始终只有2个)产品1和3.这些产品存储在独立的产品数据库中。 您的购物结果存储在一个数据库中,其中包含所有详细信息,如时间,地点等等以及2列(product_1和product_2)。同样,这种购物情况只是与我的实际情况进行比较,所以我知道这对于购物清单来说不是一个好的数据库结构。MYSQL查询问题 - 将产品详细信息加入结果

所以,现在我想获得整个收据,而不是打印产品ID,我想要的名称,例如它的价格。

如果我只有一个产品,我会用这个查询:

SELECT `list`.`time`, `list`.`location`, `prod`.`prod_name`, `prod`.`prod_price` 
FROM `shopping_list` `list`, `products` `prod` 
WHERE `list`.`product_1` = `prod`.`prod_id` 

但因为我有两个产品我不能只是去与

AND `list`.`product_2` = `prod`.`prod_id` 

但是你如何achive我会喜欢有吗?

非常感谢你, 菲尔

回答

0

你需要加入到产品表两次

例如

SELECT 
     `list`.`time`, 
     `list`.`location`, 
     `prod1`.`prod_name` `prod_name1`, 
     `prod1`.`prod_price` `prod_price1` , 
     `prod2`.`prod_name` `prod_name2`, 
     `prod2`.`prod_price` `prod_price2` 
FROM `shopping_list` `list` 
    INNER JOIN `products` `prod1` 
    ON `list`.`product_1` = `prod1`.`prod_id`  
     INNER JOIN `products` `prod2` 
    ON `list`.`product_2` = `prod2`.`prod_id` 

我不知道你的业务规则,所以你可能需要第二INNER JOIN到LEFT JOIN转换,如果他们需要总是选择两个产品。

+0

我想我只是我自己(这正是我在这个问题的方式做,但有做过类似的事情FROM表两次,像你做prod1和prod2所以没有联合,但与WHERE)。所以这几乎解决了这个问题,但是当我使用php获取结果到一个数组时,我有prod_name,所以两次索引。任何解决方案,我可以将它们标记为prod_name1和prod_name2,或者我可以如何处理这种情况......非常感谢! :) – Phil 2012-01-03 18:35:26

+1

您可以使用列别名。它们的工作方式与表别名相同。我已经更新了答案以反映这一点。 – 2012-01-03 18:37:43

+0

哇。很高兴知道:)非常感谢。我认为这现在解决了我所有的问题。总是很高兴知道您使用的技术具有哪些功能。 – Phil 2012-01-03 18:42:58

0

我不知道您的确切情况,但通常像product_1和product_2这样的字段名称表示数据库设计不正确。但是,如果您确实需要您需要两次加入产品表。

select 
* 
from 
list l 
, product p1 
, product p2 
where 
    l.product_1 = p1.product_id 
    and l.product_2 = p2.product_id 

(这是oracle语法,但我认为它也可以在mysql中使用)。

hth。

+0

是的,正如我上面提到的,我不会将它用于产品列表或类似的东西。在我的情况下,这是一个体育赛事(包括时间,联赛,受欢迎程度等),prod1是主队和客队,他们都存储在一个“俱乐部”表中,并提供更详细的信息。我认为这样的结构更合理或? – Phil 2012-01-03 18:37:47

+0

是的,我同意,对于像这样的结构是完全没错:) – 2012-01-05 11:02:36

0

如果能从1个数据库结果行中解析出两行,以前的答案很好。如果你想从数据库中两行,你可以做一个UNION查询:

SELECT `list`.`time`, `list`.`location`, `prod`.`prod_name`, `prod`.`prod_price` 
FROM `shopping_list` `list`, `products` `prod` 
WHERE `list`.`product_1` = `prod`.`prod_id` 
UNION 
SELECT `list`.`time`, `list`.`location`, `prod`.`prod_name`, `prod`.`prod_price` 
FROM `shopping_list` `list`, `products` `prod` 
WHERE `list`.`product_2` = `prod`.`prod_id` 
+0

我的一个朋友告诉我,我应该只使用UNION,但没有时间更详细地解释它。非常感谢你的榜样!我不确定你使用哪种方式会产生差异。 – Phil 2012-01-03 18:39:12

相关问题