我有一个表Orders
,其中包含customer_id
和supplier_id
,order_status
等。
order_id|customer_id|supplier_id
--------|-----------|-----------
1 |1 |2
customer_id
和supplier_id
都与存储其数据的Users
表相关,例如first_name
last name
,email
等..:
user_id|first_name|last_name
-------|----------|---------
1 | Jon | Doe
2 | Jane | Doe
我需要运行一个查询来提取订单数据,并从Users表中提取Customer和Supplier的数据。例如。结果必须是:
order_id|customer_first_name|customer_last_name|supplier_first_name|supplier_last_name
--------|-------------------|------------------|-------------------|------------------
1 |Jon |Doe |Jane |Doe
我一直在尝试一些不同的方法,包括Laravel方法addSelect(我无法工作 - 得到非常奇怪的'找不到方法'错误)和PHP array_merge(和其他),但似乎没有提供要求的结果。
有人可以建议是否有特定的最佳做法或方法吗?
由于
答案 0 :(得分:3)
这需要JOIN
- 将users
表格移至orders
表格两次 - 首先是supplier_id
,然后是customer_id
。所以,查询将是:
SELECT order_id, customer_id, u1.first_name as customer_first_name,
u1.last_name as customer_last_name,
supplier_id, u2.first_name as supplier_first_name,
u2.last_name as supplier_last_name
FROM orders o
INNER JOIN users u1 ON
o.customer_id = u1.user_id
INNER JOIN users u2 ON
o.supplier_id = u2.user_id
答案 1 :(得分:0)
你有没有看过PDO Transactions。结合foreach循环,我认为这样的事情可能符合您的要求。
<?php
$database->beginTransaction();
$database->query("SELECT * FROM Orders ");
$OrderData = $database->single();
$database->query("SELECT * FROM Users WHERE user_id = :user_id");
$database->bind(':user_id', $Data['customer_id']);
$UserData = $database->single();
foreach($UserData as $k=>$v)
{
$OrderData[$v] = $v;
}
$database->endTransaction();
?>
关于PDO事务的美妙之处在于,如果任何查询失败,则不会返回任何内容,并且整个事情都会被取消,这是一个全有或全无的事情。