मेरे पास एक MySQL तालिका है:

-----------------------------------------------------------
time     |     host     |      var1     |      var2    ....
20110101 |     hostA    |      7        |      8       ....
20110102 |     hostB    |      2        |      3       ....
20110102 |     hostA    |      4        |      2       ....
20110103 |     hostC    |      9        |      9       ....
20110104 |     hostC    |      1        |      1       ....
20110104 |     hostA    |      10       |      2       ....
.... etc ......
-----------------------------------------------------------

और मैं प्रत्येक चर (var1, var2, var3, आदि) के लिए नई तालिकाएँ बनाना चाहता हूँ, जो इस तरह दिखती हैं (var1 के लिए):

-----------------------------------------------------------
time     |   hostA-var1 |   hostB-var1  |   hostC-var1 
20110101 |     7        |      null     |      null    ....
20110102 |     4        |      2        |      null    ....
20110103 |     null     |      null     |      9       ....
20110104 |     10       |      null     |      1       ....
.... etc ......
-----------------------------------------------------------

मूल तालिका काफी बड़ी है इसलिए प्रदर्शन एक चिंता का विषय है। मैं MySQL में बहुत कुशल नहीं हूं, ऐसा करने का एकमात्र तरीका मैं ऐसा करने के लिए सोच सकता हूं जो प्रति मेजबान अद्वितीय है और फिर समय पर शामिल हो रहा है। इसलिए (var1 के लिए):

create tempTableA select time, var1 as hostA-var1 from mainTable where host=hostA

create tempTableB select time, var1 as hostB-var1 from mainTable where host=hostB

और फिर time वेरिएबल का उपयोग करके सभी tempTables में शामिल हों।

0
garretriddle 5 अप्रैल 2011, 04:38
मुझे नहीं पता कि आप तालिका 1 से तालिका 2 तक कैसे पहुंचते हैं। यह 1 (और केवल दिखाए गए) में सभी मानों को सहसंबंध दिखाने के लिए सही जगहों 2 में रखने में मदद करेगा।
 – 
RichardTheKiwi
5 अप्रैल 2011, 04:42
भगवान बिंदु @ रिचर्ड, इसके लिए खेद है। मैंने इसे संपादित किया ताकि मान अभी सटीक हों।
 – 
garretriddle
5 अप्रैल 2011, 04:51
काफी बेहतर! मुझे इसकी उम्मीद थी, इसलिए उत्तर नीचे है।
 – 
RichardTheKiwi
5 अप्रैल 2011, 04:55

2 जवाब

सबसे बढ़िया उत्तर

PIVOT उदाहरणों के लिए Google खोजें

select time,
  MAX(case when host='hostA' then var1 end) `hostA-var1`,
  MAX(case when host='hostA' then var2 end) `hostA-var2`,
  MAX(case when host='hostA' then var3 end) `hostA-var3`,
  MAX(case when host='hostB' then var1 end) `hostB-var1`,
  MAX(case when host='hostB' then var2 end) `hostB-var2`,
  MAX(case when host='hostB' then var3 end) `hostB-var3`,
  .....
from tbl
group by time
0
RichardTheKiwi 5 अप्रैल 2011, 04:47

यदि आप किसी क्वेरी में केवल दो फ़ील्ड मर्ज करना चाहते हैं, तो मैं CONCAT फ़ंक्शन की अनुशंसा करता हूं।

मान लें कि आपको var2 के साथ विलय किए गए var1 से मिलान करने की आवश्यकता है, आप इसका उपयोग करेंगे

CONCAT(`var1`,`var2`)

तो आपको उन पंक्तियों को खोजना होगा जिनमें एक अवधि के साथ var1 और var2 है, आप इसका उपयोग करेंगे:

$sql = "SELECT * FROM `table` WHERE CONCAT(`var1`,'.',`var2`)='$input'";

और यदि आप बीच की अवधि के साथ var1 और var2 आउटपुट करना चाहते हैं:

$sql = "SELECT CONCAT(`var1`,'.',`var2`) AS `var1andvar2` FROM `table`";

उम्मीद है कि कुछ मदद करता है।

0
Ben 5 अप्रैल 2011, 04:46