php - 在 PHP 中连接 3 个表以创建一个数组

标签 php mysql arrays

我在 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/

相关文章:

java - 使用子字符串将字符串拆分为字符串数组(Java)

php - php/sql 中的数字和计算

php - 在刷新实体之前计算唯一别名

php - MySQL 表连接

php - 看到别人的帖子

arrays - 在 UITableView 中按时间顺序对 Firebase 帖子进行排序(最新的在前)

javascript - 存储本 map 片以便在另一个页面上传

php - 套接字PHP卡在fgets上

java - 如何从 DAO 迭代多个数据

javascript - 将项目添加到 Observable Array Knockout