विशिष्ट उदाहरण में, आपको बस इस शर्त को लिखना चाहिए:
$query->condition('n.language', 'ab', '<>');
जेनेरिक मामले में, जहां आपको एक सब-क्वेरी से लौटाए गए मानों पर आधारित डेटाबेस में पंक्तियों का चयन करने की आवश्यकता होती है, आपको इस पर विचार करना चाहिए:
"NOT IN" को ऑपरेटर के रूप में स्वीकार किया जाता है SelectQuery::condition()
। वास्तव में, निम्नलिखित क्वेरी को निष्पादित किया जाएगा:
$query = db_select('node', 'n')->fields('n');
$query->condition('n.nid', array(1, 2, 3), 'NOT IN');
$nodes = $query->execute();
foreach ($nodes as $node) {
dsm($node->nid);
}
जैसा कि सशर्त खंड ("सबसेलेक्ट्स") में रिपोर्ट किया गया है , मान के लिए SelectQuery::condition()
लागू होने वाली एक वस्तु को भी स्वीकार करता है , जैसे कि जो लौटा है ; समस्या यह है कि वास्तव में आप इसका उपयोग कर सकते हैं जब मूल्य के बराबर है । देखें कि उप-खंड DBTNG परिस्थितियों में काम नहीं करते हैं, सिवाय जब IN के लिए मान के रूप में उपयोग किया जाता है ।SelectQueryInterface
$value
db_select()
$operator
"IN"
एकमात्र तरीका मैं "सब में" ऑपरेटर का उपयोग करने के लिए उप-क्वेरी के साथ देख सकता हूं condition
:
- सरणी प्राप्त करने के लिए सबक्वेरी निष्पादित करें
निम्नलिखित स्निपेट में स्थिति सेट करने वाली मुख्य क्वेरी निष्पादित करें
$query->condition($key, $subquery_result, 'NOT IN');
$subquery_result
वह सरणी है, जिसमें उप-क्वेरी का परिणाम होता है।
अन्यथा, आप where()
दूसरों के कहे अनुसार उपयोग कर सकते हैं , जो आपके द्वारा जोड़े जाने वाले क्वेरी के भाग के लिए एक स्ट्रिंग को स्वीकार करता है।
ध्यान रखें कि db_select()
यह धीमा है db_query()
; जब आप जानते हैं कि अन्य मॉड्यूल द्वारा परिवर्तन किया जा सकता है तो आपको पहले का उपयोग करना चाहिए। अन्यथा, यदि अन्य मॉड्यूल hook_query_alter()
आपकी क्वेरी को बदलने के लिए उपयोग करने वाले नहीं हैं , तो आपको उपयोग करना चाहिए db_query()
।
नोड्स तक पहुंचने के मामले में, यदि आपको केवल उन नोड्स को प्राप्त करने की आवश्यकता है, जिनके लिए उपयोगकर्ता की पहुंच है, तो आपको क्वेरी के टैग के रूप में उपयोग करने db_select()
और जोड़ने की आवश्यकता है । उदाहरण के लिए, निम्न कोड का उपयोग करता है।'node_access'
SelectQuery::addTag()
blog_page_last()
$query = db_select('node', 'n')->extend('PagerDefault');
$nids = $query
->fields('n', array('nid', 'sticky', 'created'))
->condition('type', 'blog')
->condition('status', 1)
->orderBy('sticky', 'DESC')
->orderBy('created', 'DESC')
->limit(variable_get('default_nodes_main', 10))
->addTag('node_access')
->execute()
->fetchCol();
इसी तरह के कोड का उपयोग किया जाता है book_block_view()
।
$select = db_select('node', 'n')
->fields('n', array('title'))
->condition('n.nid', $node->book['bid'])
->addTag('node_access');
$title = $select->execute()->fetchField();
SELECT nid FROM node WHERE language != 'ab'
?