में कोडइग्निटर ActiveRecord फ़ील्ड नाम जॉइन शामिल एक क्वेरी बना रहा हूं। यह पहली बार है जब मैंने सक्रिय रिकॉर्ड के साथ डीबी सामान किया है और मैंने थोड़ा सा झटका लगाया है।जॉइन स्टेटमेंट
मैं एक मेज शामिल करना चाहते हैं users
मेज पर companies
कहा जाता है तो मैं कंपनी आदि उपयोगकर्ता में है के नाम पर प्राप्त कर सकते हैं मैं सफलतापूर्वक इसलिए की तरह की इस तरह किया है:।
function get_profile_by_username($username)
{
$this->db->join('companies', $this->table_name.'.company_id = companies.id');
$this->db->where('LOWER(username)=', strtolower($username));
$query = $this->db->get($this->table_name);
if ($query->num_rows() == 1) return $query->row();
return NULL;
}
हालांकि मुद्दा यह है कि companies
में फ़ील्ड, वे id
और name
उस ऑब्जेक्ट में वापस लौटे हैं जैसे कि name
।
आम तौर पर जब मैं कच्ची क्वेरी लिखता हूं तो मैं टेबल पर उपनाम देता हूं और परिणाम u.company_id
, c.name
जैसा कुछ होगा। तो मुझे पता होगा कि name
उपयोगकर्ता के साथ कुछ लेना देना नहीं था लेकिन निश्चित रूप से कंपनी का नाम है। और हालांकि भविष्य में संभावित रूप से कोई समस्या नहीं है, id
कॉलम स्पष्ट रूप से परिणाम सेट में सह-अस्तित्व में नहीं हो सकता है, इसलिए कोई ओवरराइट हो जाता है!
हम कुछ तालिकाओं से आने वाले क्षेत्रों के बीच इस तरह के अंतर को कैसे प्राप्त कर सकते हैं? या क्या तालिका में शामिल होने और जुड़ने वाले क्वेरी डेटा सेट/ऑब्जेक्ट्स के साथ काम करने का एक बेहतर तरीका है?
संपादित करें:
अगर मैं एक कच्चे क्वेरी के रूप में यह कर रहा था मुझे क्या करना चाहते हैं:
SELECT u.id, u.username, c.name
FROM users AS u
JOIN companies AS c
ON c.id = u.company_id
WHERE u.username = 'foobar';
कौन महान है लेकिन अगर मुझे लगता है कि सक्रिय रिकॉर्ड में मुझे लगता है करने की कोशिश की है कि बहुत गरीब अभ्यास है , अगर यह बिल्कुल काम करता है।
मैंने सोचा कि मुझे इसका सहारा लेना पड़ सकता है, लेकिन मुझे विश्वास नहीं था कि मैं इस तरह का चयन करने में सक्षम हूं। मैं अपने उदाहरण जैसे तालिकाओं को उपनाम कैसे दे सकता हूं, कुछ '-> प्राप्त करें (' उपयोगकर्ता AS u ')'? क्या यह सभी Activerecord डेटाबेस लक्ष्यों के साथ संगत होगा? – deed02392
@ deed02392 चेक, अद्यतन कोड – safarov
ठीक है जैसा मैंने सोचा था। 'एएस' ऑपरेटर मानक एसक्यूएल सही है, यह सभी डीबी भाषाओं में उपनाम सेट करता है? या यह केवल प्रमाणित डीबी में काम करेगा। – deed02392