Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.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中连接3个表以生成一个数组_Php_Mysql_Arrays - Fatal编程技术网

在PHP中连接3个表以生成一个数组

在PHP中连接3个表以生成一个数组,php,mysql,arrays,Php,Mysql,Arrays,我在mySQL中遇到了一个查询问题 实际上,我的mySQL查询如下所示: $contact = array ( "client" => array("KDX_Id" => 44, "KDX_Name" => "Luka"), "company" => array("KDX_Id" => 46, "KDX_Company" => "Google"), "billing" => array() // Noting here be

我在mySQL中遇到了一个查询问题

实际上,我的mySQL查询如下所示:

$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
);
\u发票
表格

|--------|---------------|
| IVC_Id | IVC_BookingId |
|--------|---------------|
| 1      | 99            |
|--------|---------------|
|--------|--------------|---------------|---------------|
| BOO_Id | BOO_ClientId | BOO_CompanyId | BOO_BillingId |
|--------|--------------|---------------|---------------|
| 99     | 44           | 46            | 0             |
|--------|--------------|---------------|---------------|
|--------|----------|----------|-------------|
| KDX_Id | KDX_Type | KDX_Name | KDX_Company |
|--------|----------|----------|-------------|
| 44     | client   | Luka     |             |
| 46     | company  |          | Google      |
| 78     | billing  | Georgia  |             |
|--------|----------|----------|-------------|
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

|--------|---------------|
| IVC_Id | IVC_BookingId |
|--------|---------------|
| 1      | 99            |
|--------|---------------|
|--------|--------------|---------------|---------------|
| BOO_Id | BOO_ClientId | BOO_CompanyId | BOO_BillingId |
|--------|--------------|---------------|---------------|
| 99     | 44           | 46            | 0             |
|--------|--------------|---------------|---------------|
|--------|----------|----------|-------------|
| KDX_Id | KDX_Type | KDX_Name | KDX_Company |
|--------|----------|----------|-------------|
| 44     | client   | Luka     |             |
| 46     | company  |          | Google      |
| 78     | billing  | Georgia  |             |
|--------|----------|----------|-------------|
\uuu Kardex
表格

|--------|---------------|
| IVC_Id | IVC_BookingId |
|--------|---------------|
| 1      | 99            |
|--------|---------------|
|--------|--------------|---------------|---------------|
| BOO_Id | BOO_ClientId | BOO_CompanyId | BOO_BillingId |
|--------|--------------|---------------|---------------|
| 99     | 44           | 46            | 0             |
|--------|--------------|---------------|---------------|
|--------|----------|----------|-------------|
| 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
但它不起作用

请问有什么帮助吗


谢谢。

使用联合操作。只有当所有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连接到表uuuu Invoices,以允许选择要筛选的发票。

只是添加了
其中IVC_uid=1
部分。“不工作”并没有告诉我们太多。您是否遇到错误?您使用什么php代码将返回的行格式化为首选的php格式?至少有一个问题是,当您多次加入同一个表时,在php中选择列名时,最后一行的值将覆盖前面的行。您需要使用别名来防止这种情况。我没有任何错误。查询工作正常,但我无法获得所需的输出。您好,谢谢您的回复。是否可能遗漏了选择我的发票的
WHERE
部分?