सभी तालिकाओं के आंकड़े प्राप्त करने के लिए, आप प्रत्येक तालिका के लिए 2 या अधिक चयनों के साथ एक UNION का उपयोग कर सकते हैं:
( SELECT s.*
, table1.title AS name --or whatever field you want to show
FROM stats s
JOIN $tableName1 table1
ON s.id = table1.id
WHERE tableName = '$tableName1'
)
UNION ALL
( SELECT s.*
, table2.name AS name --or whatever field you want to show
FROM stats s
JOIN $tableName2 table2
ON s.id = table2.id
WHERE tableName = '$tableName2'
)
UNION ALL
( SELECT s.*
, table3.lastname AS name --or whatever field you want to show
FROM stats s
JOIN $tableName3 table3
ON s.id = table3.id
WHERE tableName = '$tableName3'
)
;
LEFT JOIN
के साथ Winfred के विचार का उपयोग करना एस। यह विभिन्न परिणाम उत्पन्न करता है, उदा। अन्य तालिकाओं से प्रत्येक फ़ील्ड अपने स्वयं के कॉलम में आउटपुट होता है (और कई एनयूएलएल होते हैं)।
SELECT s.*
, table1.title --or whatever fields you want to show
, table2.name
, table3.lastname --etc
FROM stats s
LEFT JOIN $tableName1 table1
ON s.id = table1.id
AND s.tableName = '$tableName1'
LEFT JOIN $tableName2 table2
ON s.id = table2.id
AND s.tableName = '$tableName2'
LEFT JOIN $tableName3 table3
ON s.id = table3.id
AND s.tableName = '$tableName3'
--this is to ensure that omited tables statistics don't appear
WHERE s.tablename IN
( '$tableName1'
, '$tableName2'
, '$tableName3'
)
;