2016-09-10 3 views
1

私は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をセットアップするかについてはあまりよく分かりません。

REVISION

ので、レビューにつきいくつかの後に。私は改訂された表の構造を追加しました。

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"; 
+0

あなたはそのクエリから得たものも投稿してください。 INNER JOINについてあなたを混乱させるものは何ですか? –

+0

これは私がクエリから抜け出すものです:警告:mysqli_fetch_assoc()は、パラメータ1がmysqli_result、ブール値が与えられていることを期待します –

+0

OK、正確なエラーメッセージがあるので、約25 000の質問があります。エラー(mysqli_query関数の結果を常にチェックしてください)を取得し、それをポストしてください。 –

答えて

0

チケットテーブルの設計が適切ではありません。私は1つのフィールドに2つの修復IDを入れることはありません。 ID(プライマリキー)と外部キーを持っているという考えはすべて失われます。

あなたのチケットテーブルは、4つではなく7つのロウを持ち、1つの値しか持たない修復IDを持つ必要があります。さらに、repair_idは外部キーとして記述し、Repairテーブルにリンクする必要があります。

この後、顧客テーブルをcustomer_idのチケットテーブルに参加させ、さらにチケットテーブルの修理テーブルに参加させることができます。

+0

はい。私は最初に2つのテーブル(Customers、Repair)としてテーブルをセットアップしました。しかし、私は個々のアイテムとして各デバイスを区別する方法の問題に遭遇しましたが、まだ1つのチケットの一部です。例えば。顧客Aは2つのデバイス(ラップトップ、タブレット)を持ち込みます。それぞれは独自の修復 "ID"を持っています。私は個々のデバイスの修復履歴を個別に追跡しようとしています。 1つのデバイスが他のデバイスよりも早く修理される可能性があり、両方のデバイスが解決されるまで「チケット」を閉じることは望ましくありません。フロントエンドにはあなたが気付いていない別の部分もあります。 –

+0

あなたの質問は閉じていますか、まだ必要な情報がまだあります。 – anil

+0

修理テーブルに顧客IDの列を追加して私のクエストオーオンに答えることができました –