2012-12-03 122 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 

字段來自表客戶

ID   NAME 
9798797  John 
7887878  Helen 

表之間的關係是很容易理解:TICKETS.CUSTOMER=CUSTOMERS.ID;PAYMENTS.RECEIPT=RECEIPTS.ID=TICKETS.ID

最終的結果,我想才達到有:

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

我試着做像這樣的東西,但它錯了某處:

$qry = mysql_query("Select TICKETS.TICKETID, RECEIPTS.DATENEW, PAYMENTS.TOTAL, CUSTOMERS.NAME, PAYMENTS.PAYMENT FROM PEOPLE, RECEIPTS 
INNER JOIN TICKETS ON RECEIPTS.ID = TICKETS.ID 
INNER JOIN CUSTOMERS ON TICKETS.CUSTOMER = CUSTOMERS.ID 
ORDER BY RECEIPTS.DATENEW"); 
+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

謝謝!你的方法是第一次,我修改了一些小錯誤,比如p.total而不是r.total。我很驚訝你的代碼在Demo中工作:) –

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

非常感謝你的代碼!這也是一個好的,對不起,但我不知道如何選擇兩個答案:)真的很感謝你的努力! –