【问题标题】:query data from multiple tables从多个表中查询数据
【发布时间】:2017-01-18 18:35:38
【问题描述】:

好的。我认为我已经引用了THIS 其他与我的情况类似的问题。但我会添加我的情况以及到目前为止我已经尝试过的内容。

Ticket Table    
*-------------------------------*
|t_id | repair_id | customer_id |
| 1   |     10    |     11      | 
| 2   |   11,12   |     12      | 
| 3   |   13,14   |     13      |
| 4   |   15,16   |     14      |
*-------------------------------* 
Repair Table    
*-----------------------------------------------------*
|repair_id  | ticket_id | device_type | repair_status | 
|     10    |    1      |   laptop    |     open      |
|     11    |    2      |   tablet    |     open      |
|     12    |    2      |   phone     |     open      | 
|     13    |    3      |   phone     |     open      |
|     14    |    3      |   tablet    |     open      |
|     15    |    4      |   laptop    |     open      |
|     16    |    4      |   laptop    |     open      |
*-----------------------------------------------------*
Customer Table    
*-----------------------------*
|customer_id | f_name | l_name | 
|     11     |  John  | Hughes |  
|     12     |  Julia | Brown  |   
|     13     |  Tim   | Duncan |  
|     14     |  Tony  | Price  |  
*-----------------------------*

我希望结果表看起来像这样:

Results Table    
*----------------------------------------------------------*
|customer_name | Repair_# | device_type    | repair_status |
| John Hughes  |   10     | laptop         |    open       | 
| Julia Brown  |   11,12  | tablet,phone   |    open       | 
| Tim Duncan   |   13,14  | phone, tablet  |    open       | 
| Tony Price   |   15,16  | laptop, laptop |    open       | 
*----------------------------------------------------------* 

这是我尝试过的查询:

$query  = "SELECT customers.id, customers.f_name, customers.l_name, device_repairs.repair_id, device_repairs.ticket_id, ";
$query .= "device_repairs.device_type,device_repairs.repair_type, device_repairs.ticket_status, ";
$query .= "FROM tickets ";
$query .= "LEFT JOIN customers ON tickets.customer_id = customers.id ORDER BY device_repairs.ticket_id DESC";

我知道我的查询不正确,但我不太确定如何设置 INNER JOIN。

修订版

所以经过一些审查。我添加了一个修改后的表格结构。

Ticket Table    
*--------------------------------------------------------------------*
|t_id|repair_id|cust_id|cust_fname|cust_lname|device_type|repair_stat|
| 1  |   10    |  11   |  John    | Hughes   | Laptop    |   open    |
| 2  |   11    |  12   |  Julia   | Brown    | Tablet    |   open    |
| 2  |   12    |  12   |  Julia   | Brown    | Phone     |   open    | 
*--------------------------------------------------------------------* 
Repair Table    
*-----------------------------------------------------*
|repair_id  | ticket_id | device_type | repair_status | 
|     10    |    1      |   laptop    |     open      |
|     11    |    2      |   tablet    |     open      |
|     12    |    2      |   phone     |     open      | 
|     13    |    3      |   phone     |     open      |
|     14    |    3      |   tablet    |     open      |
|     15    |    4      |   laptop    |     open      |
|     16    |    4      |   laptop    |     open      |
*-----------------------------------------------------*
Customer Table    
*-----------------------------*
|customer_id | f_name | l_name | 
|     11     |  John  | Hughes |  
|     12     |  Julia | Brown  |   
|     13     |  Tim   | Duncan |  
|     14     |  Tony  | Price  |  
*-----------------------------*

修改后的结果表如下:

Results Table    
*----------------------------------------------------------*
|customer_name | Repair_# | device_type    | repair_status |
| John Hughes  |   10     | laptop         |    open       | 
| Julia Brown  |   11     | tablet         |    open       |
| Julia Brown  |   12  |  | phone          |    open       |  
*----------------------------------------------------------* 

希望这会有所帮助并且更有意义。

我创建了这个查询,以便正确输出结果表。感谢您的所有意见。

$sql = "SELECT customers.id, customers.f_name, customers.l_name, device_repairs.repair_id, device_repairs.device_type, ";
$sql .="device_repairs.repair_type, device_repairs.ticket_status, device_repairs.ticketopen ";
$sql .="FROM customers, device_repairs WHERE customers.id = device_repairs.customer_id ORDER BY device_repairs.ticketopen DESC";

【问题讨论】:

  • 也发布您从该查询中得到的信息。什么让您对 INNER JOIN 感到困惑?
  • 这是我从查询中得到的:警告:mysqli_fetch_assoc() 期望参数 1 是 mysqli_result,布尔值给定
  • 好的,您可能会注意到关于 SO 的大约 25 000 个问题带有确切的错误消息。检索错误(始终检查您的mysqli_query 函数的结果)并将其发回。

标签: mysql


【解决方案1】:

票务表设计不佳。我不会将两个维修 ID 放在一个字段中。拥有 ID(主键)和外键的整个想法都丢失了。

您的工单表应该有 7 行而不是 4 行,并且其中的修复 ID 应该只有一个值。此外,repair_id 应该被描述为外键并链接到修复表。

在此之后,您可以在 customer_id 上将客户表连接到工单表,并在工单表上进一步连接维修表。

【讨论】:

  • 是的。我最初将表设置为 2(客户,维修)。但是,我遇到了如何将每个设备区分为单个项目但仍然是一张票的一部分的问题。例如。客户 A 带来 2 台设备(笔记本电脑、平板电脑)。每个都有自己的修复“id”。我正在尝试单独跟踪每个设备的维修历史。一台设备可能比另一台更早得到修复,我不希望在两台设备都解决之前关闭“票证”。前端还有一个你不知道的部分。
  • 您的查询是否已关闭或者您还需要一些进一步的输入。
  • 我能够通过在修复表中添加客户 ID 列来回答我的问题
猜你喜欢
  • 2016-06-04
  • 2020-11-29
  • 2020-09-12
  • 2012-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多