我在 mySQL 中遇到查询问题。
实际上我的 mySQL 查询如下所示:
___发票
表
|--------|---------------|
| IVC_Id | IVC_BookingId |
|--------|---------------|
| 1 | 99 |
|--------|---------------|
___预订
表
|--------|--------------|---------------|---------------|
| BOO_Id | BOO_ClientId | BOO_CompanyId | BOO_BillingId |
|--------|--------------|---------------|---------------|
| 99 | 44 | 46 | 0 |
|--------|--------------|---------------|---------------|
__Kardex
表
|--------|----------|----------|-------------|
| KDX_Id | KDX_Type | KDX_Name | KDX_Company |
|--------|----------|----------|-------------|
| 44 | client | Luka | |
| 46 | company | | Google |
| 78 | billing | Georgia | |
|--------|----------|----------|-------------|
<小时/>
如何链接这 3 个表? 我在决赛中需要的是这样的数组:
$contact = array (
"client" => array("KDX_Id" => 44, "KDX_Name" => "Luka"),
"company" => array("KDX_Id" => 46, "KDX_Company" => "Google"),
"billing" => array() // Noting here because no billing contact was link
);
我从查询开始:
SELECT *
FROM ___Invoices
JOIN ___Bookings
ON ___Invoices.IVC_BookingId=___Bookings.BOO_Id
JOIN ___Kardex
ON ___Bookings.BOO_ClientId =___Kardex.KDX_Id
OR ___Bookings.BOO_CompanyId =___Kardex.KDX_Id
OR ___Bookings.BOO_CompanyId =___Kardex.KDX_Id
WHERE IVC_Id=1
但是这不起作用。
请问有什么帮助吗?
谢谢。
最佳答案
使用 UNION 运算。仅当所有 3 个查询返回相同数量的结果时,此方法才有效。就像这样:
SELECT KDX_Id, KDX_Type, KDX_Name FROM (
(SELECT K.KDX_Id, K.KDX_Type, K.KDX_Name, B.BOO_Id
FROM ___Kardex AS K
JOIN ___Bookings AS B ON K.KDX_Id = B.BOO_ClientId)
UNION
(SELECT K.KDX_Id, K.KDX_Type, K.KDX_Company, B.BOO_Id
FROM ___Kardex AS K
JOIN ___Bookings AS B ON K.KDX_Id = B.BOO_CompanyId)
UNION
(SELECT K.KDX_Id, K.KDX_Type, K.KDX_Name, B.BOO_Id
FROM ___Kardex AS K
JOIN ___Bookings AS B ON K.KDX_Id = B.BOO_BillingId) ) AS TEMP
JOIN ___Invoices AS I ON I.IVC_BookingId = TEMP.BOO_ID
WHERE I.IVC_Id = 1
结果将类似于:
ID TYPE NAME (or company)
44 client Luka
46 company Google
然后在 PHP 代码中,循环结果的每一行,并使用类型(第二列)填充数组。
$contacts = array($results[1] => array($results[0] => $results[1]));
注意:我测试了查询,而不是 PHP,但您明白了。
编辑注意事项:并集的结果现在定义为 TEMP。然后将 TEMP 连接到表 ___Invoices,以允许选择要过滤的发票。
关于php - 在 PHP 中连接 3 个表以创建一个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47478042/