2012-05-08 9 views
5

मैं नीचे के रूप में मेरी MySQL डेटाबेस में कुछ डेटा से एक दृश्य बनाने के लिए, प्रबंधित किया है:MySQL में "व्यू" को कैसे डिज़ाइन किया जाए, जिसके परिणाम मैं देख रहे हैं?

mysql> CREATE VIEW phonelist AS 
    -> SELECT parent.parentID AS ParentID, 
    -> ParentPerson.firstName AS ParentFirstName, 
    -> ParentPerson.lastName AS ParentLastName, 
    -> ChildPerson.firstName AS PlayerFirstName, 
    -> ChildPerson.lastName AS PlayerLastName, 
    -> GuardianHomePhone.homeNumber AS GuardianHomePhone 
    -> FROM parent 
    -> JOIN player ON (parent.parentID IN (player.motherID, player.fatherID)) 
    -> JOIN person AS ParentPerson ON (ParentPerson.personID = parent.parentID) 
    -> JOIN person AS ChildPerson ON (ChildPerson.personID = player.playerID) 
    -> JOIN addressDetails AS GuardianHomePhone ON (GuardianHomePhone.personID = parent.parentID); 

Query OK, 0 rows affected (0.00 sec) 

mysql> select * from phonelist; 

+----------+-----------------+----------------+-----------------+----------------+-------------------+ 
| ParentID | ParentFirstName | ParentLastName | PlayerFirstName | PlayerLastName | GuardianHomePhone | 
+----------+-----------------+----------------+-----------------+----------------+-------------------+ 
|  8 | Gregory   | Peck   | Michael   | Peck   | 034871234   | 
|  9 | Laura   | Peck   | Michael   | Peck   | 034871234   | 
|  10 | Martha   | Petersen  | Matt   | Petersen  | 034724321   | 
|  10 | Martha   | Petersen  | Christopher  | Petersen  | 034724321   | 
|  11 | Chris   | Michaels  | Richard   | Michaels  | 034791212   | 
|  11 | Chris   | Michaels  | Shaun   | Michaels  | 034791212   | 
|  12 | Nadine   | Michaels  | Richard   | Michaels  | 034791212   | 
|  12 | Nadine   | Michaels  | Shaun   | Michaels  | 034791212   | 
|  13 | Barry   | Dackers  | Harry   | Dackers  | 034871996   | 
|  14 | Kevin   | Mitchell  | Daniel   | Mitchell  | 034742886   | 
|  15 | Rebecca   | Mitchell  | Daniel   | Mitchell  | 034742886   | 
+----------+-----------------+----------------+-----------------+----------------+-------------------+ 
11 rows in set (0.00 sec) 

mysql> 

बनाना इस दृश्य एक चुनौती थी, लेकिन नीचे दिए गए विवरण क्या मैं मुसीबत में नेविगेट करने हो रहा है:

मुझे इस दृश्य के साथ प्रत्येक खिलाड़ी को टीम जोड़ने की भी आवश्यकता है। क्योंकि मैच के लिए टीम का नाम प्राप्त करने के लिए 4 टेबल एक साथ जुड़ने की आवश्यकता है, मुझे एक साथ चीजों को विलय करने में परेशानी हो रही है। मैं एक अलग प्रश्न है कि नीचे टीमों के लिए खिलाड़ियों से मेल खाता बनाने में कामयाब रहे:

mysql> select person.firstName, person.lastName, team.teamName 
    -> from person join player on person.personID = player.playerID 
    -> join teamAllocation on person.personID = teamAllocation.playerID 
    -> join team on teamAllocation.teamID = team.teamID; 

+-------------+----------+------------+ 
| firstName | lastName | teamName | 
+-------------+----------+------------+ 
| Michael  | Peck  | U10 Red | 
| Christopher | Petersen | U10 Red | 
| Richard  | Michaels | U11 Orange | 
| Shaun  | Michaels | U9 Yellow | 
| Matt  | Petersen | U11 Orange | 
| Harry  | Dackers | U9 Yellow | 
| Daniel  | Mitchell | U9 Yellow | 
+-------------+----------+------------+ 
7 rows in set (0.00 sec) 

mysql> 

परिणाम मैं अपने सिर में visualizing हूँ कुछ इस तरह है:

+----------+-----------------+----------------+-----------------+----------------+----------------+-------------------+ 
| ParentID | ParentFirstName | ParentLastName | PlayerFirstName | TeamName  | PlayerLastName | GuardianHomePhone | 
+----------+-----------------+----------------+-----------------+----------------+----------------+-------------------+ 
|  8 | Gregory   | Peck   | Michael   | U10 Red  | Peck   | 034871234   | 
|  9 | Laura   | Peck   | Michael   | U10 Red  | Peck   | 034871234   | 
|  10 | Martha   | Petersen  | Matt   | U11 Orange  | Petersen  | 034724321   | 
|  10 | Martha   | Petersen  | Christopher  | U10 Red  | Petersen  | 034724321   | 
|  11 | Chris   | Michaels  | Richard   | U11 Orange  | Michaels  | 034791212   | 
|  11 | Chris   | Michaels  | Shaun   | U9 Yellow  | Michaels  | 034791212   | 
|  12 | Nadine   | Michaels  | Richard   | U11 Orange  | Michaels  | 034791212   | 
|  12 | Nadine   | Michaels  | Shaun   | U9 Yellow  | Michaels  | 034791212   | 
|  13 | Barry   | Dackers  | Harry   | U9 Yellow  | Dackers  | 034871996   | 
|  14 | Kevin   | Mitchell  | Daniel   | U9 Yellow  | Mitchell  | 034742886   | 
|  15 | Rebecca   | Mitchell  | Daniel   | U9 Yellow  | Mitchell  | 034742886   | 
+----------+-----------------+----------------+-----------------+----------------+----------------+-------------------+ 

मैं करूंगा किसी को भी इस पर मेरी मदद कर सकते हैं बहुत आभारी रहो। आप में से उन लोगों के लिए जो डेटा के साथ प्रश्नों का परीक्षण करना चाहते हैं, मैंने स्कीमा (डीडीएल) और डेटा (डीएमएल) स्क्रिप्ट्स (एक "पेस्ट" में) http://pastebin.com/S4iJyJUh पर रखी है।

इसके अलावा, अगर कोई सोचता है कि बेहतर तरीका है तो मैं दृश्य कर सकता हूं, मुझे बताएं।

+0

+1 दे देंगे! – kba

उत्तर

1

आप लगभग वहां हैं, आपको बस दो प्रश्नों को गठबंधन करने की आवश्यकता है।

CREATE VIEW phonelistWithTeams AS 
SELECT parent.parentID AS ParentID, 
    ParentPerson.firstName AS ParentFirstName, 
    ParentPerson.lastName AS ParentLastName, 
    ChildPerson.firstName AS PlayerFirstName, 
    ChildPerson.lastName AS PlayerLastName, 
    team.teamName AS TeamName, 
    GuardianHomePhone.homeNumber AS GuardianHomePhone 
FROM parent 
    JOIN player ON (parent.parentID IN (player.motherID, player.fatherID)) 
    JOIN person AS ParentPerson ON (ParentPerson.personID = parent.parentID) 
    JOIN person AS ChildPerson ON (ChildPerson.personID = player.playerID) 
    JOIN addressDetails AS GuardianHomePhone ON (GuardianHomePhone.personID = parent.parentID) 
    JOIN teamAllocation ON (ChildPerson.personID = teamAllocation.playerID) 
    JOIN team ON (teamAllocation.teamID = team.teamID); 

रनिंग SELECT * FROM phonelistWithTeams आप सटीक किया जा रहा है, DDL/DML की आपूर्ति, और यह आपकी मदद करने के लिए आसान बनाने के लिए

+----------+-----------------+----------------+-----------------+----------------+------------+-------------------+ 
| ParentID | ParentFirstName | ParentLastName | PlayerFirstName | PlayerLastName | TeamName | GuardianHomePhone | 
+----------+-----------------+----------------+-----------------+----------------+------------+-------------------+ 
|  8 | Gregory   | Peck   | Michael   | Peck   | U10 Red | 034871234   | 
|  9 | Laura   | Peck   | Michael   | Peck   | U10 Red | 034871234   | 
|  10 | Martha   | Petersen  | Matt   | Petersen  | U11 Orange | 034724321   | 
|  10 | Martha   | Petersen  | Christopher  | Petersen  | U10 Red | 034724321   | 
|  11 | Chris   | Michaels  | Richard   | Michaels  | U11 Orange | 034791212   | 
|  11 | Chris   | Michaels  | Shaun   | Michaels  | U9 Yellow | 034791212   | 
|  12 | Nadine   | Michaels  | Richard   | Michaels  | U11 Orange | 034791212   | 
|  12 | Nadine   | Michaels  | Shaun   | Michaels  | U9 Yellow | 034791212   | 
|  13 | Barry   | Dackers  | Harry   | Dackers  | U9 Yellow | 034871996   | 
|  14 | Kevin   | Mitchell  | Daniel   | Mitchell  | U9 Yellow | 034742886   | 
|  15 | Rebecca   | Mitchell  | Daniel   | Mitchell  | U9 Yellow | 034742886   | 
+----------+-----------------+----------------+-----------------+----------------+------------+-------------------+ 
+0

मेरी थके हुए आंखें मुझे भूल गईं कि मेरे पास पता विवरण तालिका में एक व्यक्ति आईडी था - इसे भूलना नहीं चाहिए क्योंकि यह टेबल प्राथमिक कुंजी है। आपकी प्रतिक्रिया पूरी तरह से काम करती है, बस इच्छा है कि मैं किसी भी तरह दोहराने वाले मूल्यों को एक साथ जोड़ सकता हूं (उदाहरण के लिए "मार्था पीटरसन" दो बार दोहराया जाता है क्योंकि उसके पास 2 "बच्चे/खिलाड़ी" हैं। मैंने GROUP_CONCAT का उपयोग करने की कोशिश की लेकिन मुझे यकीन नहीं है कि मेरी स्थिति में इसे कैसे कार्यान्वित किया जाए - आदर्श मैं प्रथम और अंतिम नाम संयोजन दोहराया नहीं है, इसके अलावा कि आपका जवाब सही और खुशी है कि तुम :) मुझे बाहर मदद करने के लिए – Rob

+0

आप मार्था पीटरसन नहीं करना चाहते हैं समय लगा है चाहते हैं जब तक कि यह अपरिहार्य है । वहां दो बार होने का मतलब होगा, या तो मैट या क्रिस्टोफर दिखाई नहीं देंगे। क्या तुम यही चाहते हो? – kba

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