2012-12-03 20 views
6

Non ho mai fatto trucchi PHP/MYSQL per unirmi ai multitables. Si prega di chi ha esperienza in questo campo Aiuto: campi da tavolo BIGLIETTI:PHP/MYSQL Unire più tabelle

ID TICKETID CUSTOMER 
234 29  9798797 
235 76  7887878 

campi dalla tabella RECEPTS:

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

campi dalla tabella PAGAMENTI:

RECEIPT PAYMENT 
234  cash 
235  debt 

Campi da tavolo CLIENTI:

ID   NAME 
9798797  John 
7887878  Helen 

La relazione tra le tabelle è molto facile da capire: TICKETS.CUSTOMER=CUSTOMERS.ID;PAYMENTS.RECEIPT=RECEIPTS.ID=TICKETS.ID

il risultato finale mi piacerebbe achive di avere:

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

ho cercato di fare qualcosa di simile ma errato da qualche parte:

$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

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

+0

cosa c'è che non va? c'è un errore? – Marc

+2

Perché si fa riferimento alla tabella 'Persone' nella clausola from in cui non si seleziona nulla da essa, né è stata specificata la condizione di join di essa con le altre tabelle? –

risposta

10

si dovrebbe essere in grado di utilizzare il seguente per ottenere il risultato:

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 

Vedi SQL Fiddle with Demo

Risultato:

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

Grazie! la tua strada è stata la prima e ho modificato alcuni piccoli errori come p.total invece di r.total da solo. Sono sorpreso che il tuo codice funzioni in Demo :) –

6

Questo vi darà l'output che si desidera:

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

Grazie mille per il tuo codice! E 'una buona cosa, scusa ma non so come scegliere due risposte :) Apprezzo davvero il tuo sforzo! –