2012-12-03 2 views
6

मैंने बहुतायत में शामिल होने के लिए ऐसी PHP/MYSQL चाल कभी नहीं की। मेज से फील्ड्स TICKETS:: कृपया जो इस क्षेत्र को सहायता का अनुभव है मेज सेPHP/MYSQL एकाधिक तालिकाओं में शामिल हों

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

फील्ड्स भुगतान:

ID TICKETID CUSTOMER 
234 29  9798797 
235 76  7887878 

फील्ड्स मेज से RECEPTS

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 एस –

+0

क्या गलत है? क्या कोई त्रुटि है? – Marc

+2

आप उस खंड से तालिका 'पीपुल्स' का संदर्भ क्यों देते हैं जहां आप इससे कुछ भी नहीं चुन रहे हैं, न ही आपने अन्य तालिकाओं के साथ इसमें शामिल होने की शर्त को निर्दिष्ट किया है? –

उत्तर

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

आपके कोड के लिए बहुत बहुत धन्यवाद! यह भी एक अच्छा है, माफ करना, लेकिन मुझे नहीं पता कि दो उत्तरों कैसे चुनें :) वास्तव में अपने प्रयास की सराहना करें! –

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^