Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.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
Php 连接两个表但每个表中记录数不同的问题_Php_Mysql_Join - Fatal编程技术网

Php 连接两个表但每个表中记录数不同的问题

Php 连接两个表但每个表中记录数不同的问题,php,mysql,join,Php,Mysql,Join,我希望有人能解释一下我的问题 我有两个与客户订单中的产品相关的表。一个表称为order_product,另一个表称为order_option。我需要连接这些表,以便将产品与相关选项相匹配。然而,并不是所有的产品都有选择,这就是我的问题所在 以下是每个表中与我的查询相关的列列表: 订单产品表: 订单\产品\标识 订单号 名字 订购选项: 订单号 订单\产品\标识 名字 价值观 让我们假设产品A没有选项,产品B有“尺寸”选项 我目前的发言是: SELECT * FROM order_prod

我希望有人能解释一下我的问题

我有两个与客户订单中的产品相关的表。一个表称为order_product,另一个表称为order_option。我需要连接这些表,以便将产品与相关选项相匹配。然而,并不是所有的产品都有选择,这就是我的问题所在

以下是每个表中与我的查询相关的列列表:

订单产品表:

  • 订单\产品\标识
  • 订单号
  • 名字
订购选项:

  • 订单号
  • 订单\产品\标识
  • 名字
  • 价值观
让我们假设产品A没有选项,产品B有“尺寸”选项

我目前的发言是:

SELECT * FROM order_product op 
LEFT JOIN order_option o ON o.order_id = op.order_id 
WHERE op.order_id = 1
但是,由于order ID为1的事实在order_选项表中,它所做的只是将“Size”选项附加到这两种产品上

然后我试着:

SELECT * FROM oc49_order_product op 
LEFT JOIN oc49_order_option o ON o.order_id = op.order_id 
WHERE op.order_id = 1 AND op.order_product_id = o.order_product_id
但我只得到产品B的结果,这是唯一一个有尺寸选项的产品

本质上,这里唯一唯一的匹配是order_product_id,但由于产品A没有选项,该产品id在order_选项表中不存在,因此不会有结果。我想也许我需要某种IF-ELSE语句,但我不确定它们在MySQL中是如何工作的。我希望我在这里也不需要2个查询

感谢您的帮助


Michael

将条件
op.order\u product\u id=o.order\u product\u id
移动到
JOIN ON
子句,而不是
WHERE
类似

SELECT op.* FROM oc49_order_product op 
LEFT JOIN oc49_order_option o ON o.order_id = op.order_id 
AND op.order_product_id = o.order_product_id
WHERE op.order_id = 1;