【问题标题】:Join three tables in one sql query在一个sql查询中连接三个表
【发布时间】:2013-02-08 18:38:05
【问题描述】:

我有一个包含两个表的查询,我需要再加入一个表,这样我才能得到与订单对应的产品型号。

到目前为止我所拥有的是

$sql = "SELECT 
  o.order_id, 
  o.name, 
  o.value, 
  GROUP_CONCAT(o.order_id,  o.name, o.value SEPARATOR ',') AS Options 
FROM `order_option` AS o 
LEFT JOIN `order` AS oo on o.order_id = oo.order_id
where oo.order_status_id = 2 
group by o.order_id";

mysql_query("SET NAMES 'utf8'");
$result = mysql_query($sql); 
while($row = mysql_fetch_assoc($result))
 {
$options=$row['Options'];
print "$options";

    PRINT "<br>-------------------<br>";
} 

现在,我有第三个表格,其中包含每个订单的产品型号。该表名为“order_product”,它有两个字段“order_id”和“model”(每个订单一条记录)。

我现在的结果是

ID,选项1:值,选项2:值

我想要完成的是

ID,型号,选项1:值,选项2:值

模型应该来自第三张表“order_product”的地方

非常感谢任何建议。 谢谢

【问题讨论】:

  • 您知道为什么使用LEFT JOIN 来连接现有的两个表吧?因为加入三个表并没有太大区别......但我觉得你也可以在这里进行交叉连接

标签: php mysql join


【解决方案1】:

这应该可以达到目的:

SELECT 
o.order_id, 
order_product.model,
o.name, 
o.value, 
GROUP_CONCAT(o.order_id,  o.name, o.value SEPARATOR ',') AS Options 
FROM `order_option` AS o 
LEFT JOIN `order` AS oo on o.order_id = oo.order_id
LEFT JOIN order_product ON o.order_id = order_product.order_id
where oo.order_status_id = 2 
group by o.order_id

【讨论】:

  • 它确实有效,但我也必须将 order_product.model 添加到 GROUP_CONCAT
  • 我剩下的唯一问题是,现在对于每个选项(每个选项在每个订单 ID 的单独行上)我都打印了两次 ID 和模型。知道如何阅读第二张照片,但仍然打印了选项。这就是我的意思。现在我有 ID, Model, option1:Value, ID, Model, option2:Value 我需要的是:ID, MODEL, OPTION1:Value, OPTION2:Value
【解决方案2】:

这样试试

SELECT table1.* from table1
JOIN table2 as lnk1 on table1.id = table2.tab1_id AND
JOIN table3 as lnk2 on table2.id = table3.tab2_id -->here you can use table1 as to join also

但请记住,加入的层次结构因为某些表可能与以前的表相关但可能尚未加入

【讨论】:

  • 当然我并没有按原样使用你的代码......我只是给你看了一眼......就是这样......但是两个ans对于加入都是一样的......
【解决方案3】:
$sql = "SELECT 
  o.order_id, 
  o.name, 
  o.value, 
  GROUP_CONCAT(o.order_id,  o.name, o.value SEPARATOR ',') AS Options,
  op.model 
FROM `order_option` AS o 
INNER JOIN `order` AS oo on o.order_id = oo.order_id
INNER JOIN `order_product` AS op on oo.order_id = op.order_id
where oo.order_status_id = 2 
group by o.order_id";

喜欢吗?

只需对您的订单 ID 号进行额外连接,因为它链接到所有表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 2021-12-19
    • 1970-01-01
    • 2012-05-02
    • 2015-09-23
    • 2013-07-13
    • 1970-01-01
    相关资源
    最近更新 更多