Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MYSQL查询问题-将产品详细信息加入结果_Mysql_Database_Join_Product - Fatal编程技术网

MYSQL查询问题-将产品详细信息加入结果

MYSQL查询问题-将产品详细信息加入结果,mysql,database,join,product,Mysql,Database,Join,Product,我想从我的数据库中获取一些数据,这些数据类似于你在超市得到的收据(这只是一个适合我实际情况的例子)。 例如,您得到2个(始终仅2个)产品1和3。这些产品存储在单独的产品数据库中。 您的购物结果存储在一个数据库中,该数据库包含时间、地点等所有详细信息,并分为两列(product_1和product_2)。同样,这个购物情况只是与我的真实情况进行比较,所以我知道这对于购物清单来说不是一个好的数据库结构 因此,现在我想得到整个收据,但不是打印产品ID,我想有名称,例如它的价格 如果我只有一种产品,我会

我想从我的数据库中获取一些数据,这些数据类似于你在超市得到的收据(这只是一个适合我实际情况的例子)。 例如,您得到2个(始终仅2个)产品1和3。这些产品存储在单独的产品数据库中。 您的购物结果存储在一个数据库中,该数据库包含时间、地点等所有详细信息,并分为两列(product_1和product_2)。同样,这个购物情况只是与我的真实情况进行比较,所以我知道这对于购物清单来说不是一个好的数据库结构

因此,现在我想得到整个收据,但不是打印产品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`
但是你怎么才能得到我想要的呢

多谢各位,
Phil

您需要两次加入产品表

e、 g


我不确定您的业务规则是什么,因此如果需要始终选择两个产品,您可能需要将第二个内部联接转换为左联接。

我不知道您的确切情况,但通常字段名(如product_1和product_2)表示数据库设计不好。但是,如果确实需要,则需要加入products表两次

select
 * 
from
 list l
 , product p1
 , product p2
where
  l.product_1 = p1.product_id
  and l.product_2 = p2.product_id
(这是oracle语法,但我认为它也适用于mysql)


如果您可以从1个数据库结果行中解析出两行,那么前面的答案就很有效。如果需要数据库中的两行,可以执行联合查询:

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` 

我想我自己也做了类似的事情(就像我在问题中所做的那样,但是使用FROM表两次,就像使用prod1和prod2一样,所以没有连接,但是使用WHERE)。这基本上解决了这个问题,但是当我用php将结果提取到数组中时,我有prod_名称,因此有两倍的索引。任何解决方案我如何将它们标记为prod_name1和prod_name2,或者我如何处理这种情况。。。非常感谢!:)可以使用列别名。它们的工作原理与表别名相同。我更新了答案以反映这一点。哇。很高兴知道:)非常感谢。我想这解决了我所有的问题。知道你使用的技术有什么特点总是很好的。是的,正如我上面提到的,我不把它用于产品列表或类似的东西。在我的例子中,这是一项体育赛事(包括时间、联赛、人气等),prod1是主队,prod2是客队,它们都存储在
俱乐部
表中,有关于俱乐部的更详细信息。我认为这样的结构更合理,或者?是的,我同意,对于这样的东西,结构非常好:)我的一个朋友告诉我,我应该使用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`