2011-05-23 11 views
24

मैं एसक्यूएल के लिए नया हूं, और मैं वास्तव में उच्च स्कोर डेटाबेस काम करने के लिए पर्याप्त रूप से इसके साथ बातचीत कर रहा हूं। मैं अपने ऑनलाइन MySQL डीबी तक पहुंचने के लिए एक PHP स्क्रिप्ट का उपयोग कर रहा हूं। वैसे भी।MySQL - INSERT, VALUES, और चयन का संयोजन?

मेरे पास 2 टेबल, प्लेयर और स्कोर है। प्लेयर में एक आईडी, अद्वितीयडिवाइस आईडी, और chosenname है। स्कोर में सामान्य चीजें हैं जिनकी आप अपेक्षा करते हैं।

मैं वास्तव में किसी एक क्वेरी में करने के लिए (जटिलता को कम करने के लिए ...) करना चाहते हैं क्या वाक्यविन्यास

INSERT INTO scores(score,difficulty,playerid) 
    VALUES(TheScoreThatImProviding,TheDifficultyThatImProviding, (SELECT 
     id FROM player WHERE uniqueDeviceId = TheUniqueIdThatImProviding) 
    ) 
की तरह, राक्षस के कुछ प्रकार में

INSERT INTO scores VALUES 
and INSERT INTO scores SELECT... 

का गठबंधन करने के लिए है

अगर यह समझ में आता है। मैं playerId (तीसरा "मान") देखना चाहता हूं, और प्रदान किए गए VALUES के इनपुट के साथ उस चयन का परिणाम मिलाएं।

क्या यह संभव है? सभी googling परिणाम Ive पाया या तो यह सभी मूल्य या सभी चयन है।

उत्तर

46

समझ में आता है और INSERT SELECT कहा जाता है। यह uniqueDeviceId 123 के लिए एक उदाहरण क्वेरी है, स्कोर 5 और कठिनाई वे आसान:

INSERT INTO scores (score, difficulty, playerid) 
    SELECT 5, 'easy', id 
    FROM player WHERE uniqueDeviceId = 123; 
+0

तो मैं केवल चयन भाग में हार्ड-कोडित मानों में कह सकता हूं, और यह नामक कॉलम की तलाश नहीं करेगा जब यह प्लेयर टेबल की खोज करता है? – Eric

+0

नंबर सीधे कॉलम की तलाश किए बिना पारित किए जाते हैं। स्ट्रिंग्स भी – Alp

+0

उत्कृष्ट। आपका बहुत बहुत धन्यवाद। मैंने अभी उस वाक्यविन्यास का परीक्षण किया और यह वास्तव में काम करता है। – Eric

4

this page करने के लिए आप निकट पहुंच गए हैं अनुसार। लेकिन सभी मूल्यों को अपने चयन में डाल दें। कुछ की तरह:

insert into scores (score, difficulty, playerid) 
    select TheScoreThatImProviding, TheDifficultyThatImProviding, player.id 
     from player where uniqueDeviceId = TheUniqueIdThatImProviding 
1

क्या इस दृष्टिकोण के बारे में:

INSERT INTO `tableA` SET 
      columnA = (SELECT `columnY` FROM `tableY` WHERE `id` = 2), 
      columnB = (SELECT `columnZ` FROM `tableB` WHERE `id` = 3); 

मैं इसे अभी तक बेंचमार्क नहीं किया। लेकिन एकाधिक SELECT कथन का उपयोग डेटाबेस सर्वर को बोझ देगा। इस दृष्टिकोण का प्लस साइड पठनीयता है।

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