2012-12-03 16 views
6

マルチテーブルに参加するためのPHP/MYSQLのトリックは一度もありません。このフィールドヘルプの経験を持ってしてください人: フィールドをテーブルからチケットPHP/MYSQL複数のテーブルを結合する

ID TICKETID CUSTOMER 
234 29  9798797 
235 76  7887878 

フィールドテーブルからRECEPTS

ID DATENEW TOTAL 
234 2012-12-03 22.57 
235 2012-12-03 33.98 

フィールドテーブルから支払い

RECEIPT PAYMENT 
234  cash 
235  debt 

フィールドテーブルCUSTOMERS

ID   NAME 
9798797  John 
7887878  Helen 

テーブル間の関係を理解することは非常に簡単です:TICKETS.CUSTOMER=CUSTOMERS.ID;PAYMENTS.RECEIPT=RECEIPTS.ID=TICKETS.ID

私が持っているachiveしたいと思います最終結果:

TICKETID DATENEW  NAME PAYMENT TOTAL 
29  2012-12-03 John  cash 22.57 
76  2012-12-03 Helen debt 33.98 

私が実行しようとしましたこのようなものですが、どこかで間違っています:

+1

参照http://stackoverflow.com/questions/1204217/mysql-select-join-3-tabl es –

+0

何が問題なのですか?エラーはありますか? – Marc

+2

なぜあなたはそれから何も選択していないfrom節の 'People'テーブルを参照していますが、他のテーブルとの結合条件を指定していませんでしたか? –

答えて

10

を:

select t.ticketid, 
    date_format(r.datenew, '%Y-%m-%d') datenew, 
    c.name, 
    p.payment, 
    r.total 
from tickets t 
left join RECEPTS r 
    on t.id = r.id 
left join CUSTOMERS c 
    on t.customer = c.id 
left join payments p 
    on t.id = p.RECEIPT 
    and r.id = p.RECEIPT 

SQL Fiddle with Demo

の検索結果を参照してください。

| TICKETID | DATENEW | NAME | PAYMENT | TOTAL | 
--------------------------------------------------- 
|  29 | 2012-12-03 | John | cash | 22.57 | 
|  76 | 2012-12-03 | Helen | debt | 33.98 | 
+0

ありがとうございました!あなたのやり方が最初で、私はr.totalの代わりにp.totalのような小さな間違いを修正しました。私はあなたのコードがデモで働いていることに驚いています:) –

6

これは、あなたが望む出力与える:あなたは結果を得るために、以下を使用することができるはずです

SELECT 
    p.RECEIPT AS TICKETID, 
    r.DATENEW, 
    c.NAME, 
    p.PAYMENT, 
    r.TOTAL 
FROM 
    PAYMENTS p 
LEFT JOIN 
    RECEIPTS r ON r.ID = p.RECEIPT 
LEFT JOIN 
    TICKETS t ON t.ID = p.RECEIPT 
LEFT JOIN 
    CUSTOMERS c ON c.ID = t.CUSTOMER 
ORDER BY 
    r.DATENEW DESC 
+0

コードありがとう!それは良いものですが、申し訳ありませんが、私は2つの答えを選択する方法を知りません:)本当にあなたの努力に感謝! –

関連する問題