2012-12-03 16 views
6

Nigdy nie robiłem takich sztuczek PHP/MYSQL, aby dołączyć do multitables. Proszę, kto ma doświadczenie w tej dziedzinie Pomoc: pola z tabeli BILETY:PHP/MYSQL Dołącz do wielu tabel

ID TICKETID CUSTOMER 
234 29  9798797 
235 76  7887878 

pól z tabeli RECEPTS:

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

pól z tabeli PŁATNOŚCI:

RECEIPT PAYMENT 
234  cash 
235  debt 

Pola od Stół KLIENCI:

ID   NAME 
9798797  John 
7887878  Helen 

Relacja między tabelami jest bardzo łatwy do zrozumienia: TICKETS.CUSTOMER=CUSTOMERS.ID;PAYMENTS.RECEIPT=RECEIPTS.ID=TICKETS.ID

ostatecznego wyniku Chciałbym achive mieć:

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

Próbowałem zrobić coś takiego, ale to źle gdzieś:

$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

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

+0

co jest nie tak? czy jest błąd? – Marc

+2

Dlaczego odwołujesz się do tabeli "Ludzie" w klauzuli "od", w której nic nie wybierzesz, ani nie określiłeś jej warunku łączenia z innymi tabelami? –

Odpowiedz

10

powinieneś być w stanie korzystać z następujących czynności, aby uzyskać wynik:

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 

Zobacz SQL Fiddle with Demo

Wynik:

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

Dziękujemy! Twoja droga była pierwsza, a ja zmodyfikowałem kilka małych błędów, takich jak p.total zamiast r.total. Jestem zaskoczony, że twój kod działa w Demo :) –

6

Pozwoli to wyjście, które chcesz:

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

Dziękuję bardzo za Twój kod! Jest to również dobre, przepraszam, ale nie wiem, jak wybrać dwie odpowiedzi :) Naprawdę doceniam twój wysiłek! –

Powiązane problemy