2015-10-22 3 views
6

मेरे पास एक से अधिक टेबल है जो एक साथ जुड़ती है और मुझे एक प्रश्न की आवश्यकता है और सभी संदर्भ भी प्राप्त करें!
क्या यह संभव है yii2 ??
उन्हें पदानुक्रम सरणी में प्राप्त करें ??
कैसे ???yii2 में संदर्भ अन्य तालिका के साथ तालिका कैसे प्राप्त करें?

क्या इसमें शामिल होने का उपयोग करना संभव नहीं है ???

आपकी मदद के लिए धन्यवाद !!!!

sample db

+0

आप ** ** क्यों शामिल नहीं होना चाहते हैं? – Sjon

+0

इसके बिना किसी भी शामिल हो? आलसी लोडिंग या कुछ !! – mohsen

+0

मुझे लगता है कि शामिल होना भी बेहतर है। क्या आप हमें बता सकते हैं कि आप अपना आउटपुट कैसे चाहते हैं? –

उत्तर

1

यदि आपने Gii का उपयोग करके प्रत्येक तालिका के लिए मॉडल कक्षाएं बनाई हैं और जेनरेट किए गए मॉडल में संबंध बनाने के लिए चयनित हैं, तो आप निम्न की तरह कुछ कर सकते हैं।

1) अपने देश में मॉडल बस विधि है कि इस तरह के हवाई अड्डे के साथ संबंध वाणी बदलने के लिए:

public function getAirports() { 
    return $this->hasMany(Airports::className(), ['country_id' => 'id'])->with('airlines'); 
} 

2) जब आप देशों के लिए क्वेरी करते हैं और आपको संबंधित हवाई अड्डों, एयरलाइंस की आवश्यकता है और इसे इस तरह करते हैं flightbooked:

$countries = Countries::find() 
    ->where('something = something_else') 
    ->with('airports') 
    ->with('flightbooked') 
    ->all(); 

इस तरह से आप सभी संबंधित मॉडल आलसी लोडिंग का उपयोग करने से डेटाबेस के लिए जिस तरह से कम प्रश्नों के साथ आबादी वाले हो जाएगा।

0

शायद यू संघ इस बात के लिए सभी उपयोग कर सकते हैं। इस ऑपरेटर के साथ, आप परिणामों से सेट को कई प्रश्नों से एक साथ जोड़ सकते हैं, प्रत्येक से सभी पंक्तियों को संरक्षित कर सकते हैं। ध्यान दें कि एक यूनियन ऑपरेटर (सभी कीवर्ड के बिना) परिणामस्वरूप मौजूद किसी भी "डुप्लिकेट" पंक्तियों को खत्म कर देगा। यूनियन ऑल ऑपरेटर प्रत्येक क्वेरी से सभी पंक्तियों को संरक्षित करता है (और संभवतः बेहतर प्रदर्शन करेगा क्योंकि इसमें डुप्लिकेट चेक और निष्कासन ऑपरेशन करने का ओवरहेड नहीं है)।

प्रत्येक कॉलम के कॉलम और डेटा प्रकार की संख्या प्रत्येक प्रश्न में मेल खाना चाहिए। यदि किसी एक प्रश्न में दूसरे की तुलना में अधिक कॉलम हैं, तो हम कभी-कभी कॉलम और डेटाटाइप "मैच" बनाने के लिए अन्य क्वेरी में डमी एक्सप्रेशन शामिल करते हैं। प्रायः, प्रत्येक क्वेरी की चयन सूची में एक अभिव्यक्ति (एक अतिरिक्त कॉलम) शामिल करना उपयोगी होता है जो एक शाब्दिक लौटाता है, यह प्रकट करने के लिए कि कौन सी क्वेरी पंक्ति का "स्रोत" था।

SELECT 'col1' AS source, col23, col343, col33, d FROM table1 WHERE ... 
UNION ALL 
SELECT 'col2', t2.fee, table2.fi, table2.fo, 'fum' FROM table2 JOIN table3 ON ... 
UNION ALL 
SELECT 'col3', '1', '2', buckle, my_shoe FROM table4 

आप कोष्ठक का एक सेट में इस तरह एक प्रश्न लपेट कर सकते हैं और एक इनलाइन दृश्य के रूप में इसका इस्तेमाल करते हैं (या "व्युत्पन्न तालिका", MySQL शब्दावली में) है, ताकि आप के सभी पर कुल कार्रवाई कर सकते हैं पंक्तियों। उदाहरण:

select one.a 
    , SUM(one.b) 

    FROM (
     SELECT 'q1' AS source, a, b, c, d FROM t1 
      UNION ALL 
     SELECT 'q2', t2.fee, t2.fi, t2.fo, 'fum' FROM t2 
     ) one 
GROUP BY one.a 
ORDER BY one.a 

लेकिन मुझे लगता है कि तालिकाओं में अधिक उपयुक्त होना शामिल है। आशा है कि मदद से आप

+0

हाँ मुझे लगता है कि शामिल होना बेहतर है! – mohsen

1

मैं सिर्फ एक छोटा सा सुझाव देना चाहता था:

आप तालिकाओं में संबंधों को बनाए रखने रहे हैं और यदि आप जीआईआई का उपयोग कर अपने कोड जेनरेट किया है, तो है कि आप के लिए मिलती है उत्पन्न होगा के रूप में। फिर आप आसानी से किसी भी तालिका के किसी भी कॉलम तक पहुंच सकते हैं।

लेकिन मुझे लगता है कि UNIONJOIN का विकल्प नहीं हो सकता है।

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