logo

एक्स्ट्रा ब्लॉक टाइप्स (EBT) - नया लेआउट बिल्डर अनुभव❗

एक्स्ट्रा ब्लॉक टाइप्स (EBT) - स्टाइलिश, कस्टमाइज़ेबल ब्लॉक टाइप्स: स्लाइडशो, टैब्स, कार्ड्स, एकॉर्डियन्स और कई अन्य। बैकग्राउंड, DOM बॉक्स, जावास्क्रिप्ट प्लगइन्स के लिए बिल्ट-इन सेटिंग्स। आज ही लेआउट बिल्डिंग का भविष्य अनुभव करें।

डेमो EBT मॉड्यूल्स EBT मॉड्यूल्स डाउनलोड करें

❗एक्स्ट्रा पैराग्राफ टाइप्स (EPT) - नया पैराग्राफ्स अनुभव

एक्स्ट्रा पैराग्राफ टाइप्स (EPT) - एनालॉजिकल पैराग्राफ आधारित मॉड्यूल्स का सेट।

डेमो EPT मॉड्यूल्स EPT मॉड्यूल्स डाउनलोड करें

स्क्रॉल

Drupal 7 में डेटाबेस के साथ काम — पाठ 4 — डायनेमिक क्वेरीज़ (SELECT)

14/10/2025, by Ivan

अब हम Drupal Database API के सबसे दिलचस्प भाग — डायनेमिक क्वेरीज़ — तक पहुँच गए हैं। इन्हें “डायनेमिक” इसलिए कहा जाता है क्योंकि Drupal क्वेरी स्ट्रिंग को स्वतः तैयार करता है। सभी INSERT, UPDATE, DELETE और MERGE क्वेरीज़ डायनेमिक हो सकती हैं। SELECT क्वेरीज़ भी या तो स्टैटिक या डायनेमिक हो सकती हैं, लेकिन Drupal में SELECT के लिए भी डायनेमिक क्वेरीज़ का उपयोग करना बेहतर होता है।

सभी डायनेमिक क्वेरीज़ ऑब्जेक्ट्स के रूप में बनाई जाती हैं और आवश्यकता पड़ने पर निष्पादित की जाती हैं। जैसे स्टैटिक क्वेरीज़ के लिए procedural wrappers होते हैं, वैसे ही डायनेमिक क्वेरीज़ भी ऑब्जेक्ट्स के रूप में परिभाषित की जाती हैं और उनमें अतिरिक्त पैरामीटर्स चेनिंग के माध्यम से जोड़े जा सकते हैं।

db_select() — SELECT क्वेरीज़

डायनेमिक SELECT क्वेरी बनाने के लिए db_select() का उपयोग किया जाता है। उदाहरण:

<?php
$query = db_select('node', 'n', $options);
?>

यहाँ ‘node’ उस टेबल का नाम है जिससे हम डेटा प्राप्त कर रहे हैं (SQL के FROM के समान)। ध्यान दें — टेबल नाम को कर्ली ब्रेसेस {} में लपेटने की आवश्यकता नहीं है; Drupal का क्वेरी बिल्डर यह अपने आप करता है। दूसरा पैरामीटर टेबल का एलियस (alias) है, और तीसरा पैरामीटर $options एक वैकल्पिक ऐरे है।

एक सरल उदाहरण

<?php
$query = db_select('users', 'u');
$query
  ->condition('u.uid', 0, '<>')
  ->fields('u', array('uid', 'name', 'status', 'created', 'access'))
  ->range(0, 50);

$result = $query->execute();
?>

यह क्वेरी इस SQL क्वेरी के बराबर है:

SELECT uid, name, status, created, access FROM {users} u WHERE uid <> 0 LIMIT 50 OFFSET 0;

Joins (टेबल जोड़ना)

एक से अधिक टेबल्स को जोड़ने के लिए join(), innerJoin(), leftJoin(), या rightJoin() का उपयोग करें:

<?php
$table_alias = $query->join('user', 'u', 'n.uid = u.uid AND u.uid = :uid', array(':uid' => 5));
?>

ऊपर का उदाहरण INNER JOIN बनाता है, जिसमें “user” टेबल “u” एलियस से जुड़ती है। यह सुनिश्चित करें कि आप हमेशा placeholder (जैसे :uid) का उपयोग करें ताकि SQL injection से बचा जा सके।

Fields (फील्ड्स जोड़ना)

किसी टेबल से विशिष्ट फील्ड्स प्राप्त करने के लिए addField() या fields() का उपयोग करें:

<?php
$title_field = $query->addField('n', 'title', 'my_title');
?>

या एक साथ कई फील्ड्स जोड़ने के लिए:

<?php
$query->fields('n', array('nid', 'title', 'created', 'uid'));
?>

DISTINCT

डुप्लिकेट रिकॉर्ड्स हटाने के लिए:

<?php
$query->distinct();
?>

ध्यान रखें कि DISTINCT प्रदर्शन को प्रभावित कर सकता है, इसलिए केवल आवश्यक होने पर ही उपयोग करें।

Expressions (addExpression)

SQL एक्सप्रेशन्स जोड़ने के लिए:

<?php
$count_alias = $query->addExpression('COUNT(uid)', 'uid_count');
$count_alias = $query->addExpression('created - :offset', 'uid_count', array(':offset' => 3600));
?>

यह SQL में “COUNT(uid) AS uid_count” जैसा परिणाम देगा।

ORDER BY

रिज़ल्ट को सॉर्ट करने के लिए:

<?php
$query->orderBy('title', 'DESC');
?>

या कई फील्ड्स के अनुसार:

<?php
$query->orderBy('created', 'DESC')->orderBy('title', 'ASC');
?>

रैंडम क्रम (orderRandom)

रैंडम ऑर्डर में रिज़ल्ट पाने के लिए:

<?php
$query->orderRandom();
?>

GROUP BY

<?php
$query->groupBy('uid');
?>

इससे रिकॉर्ड्स UID के आधार पर समूहित होंगे।

LIMIT और RANGE

<?php
$query->range(5, 10);
?>

यह 6वीं रिकॉर्ड से शुरू होकर 10 रिकॉर्ड्स लौटाएगा (0 से गिनती शुरू होती है)।

TableSort एक्सटेंडर

टेबल को sortable हेडर के साथ दिखाने के लिए:

<?php
$query = $query
  ->extend('TableSort')
  ->orderByHeader($header);
?>

WHERE और HAVING कंडीशंस

कंडीशंस जोड़ने के लिए condition() या where() का उपयोग करें। HAVING क्लॉज़ के लिए havingCondition() या having() का प्रयोग किया जाता है। इनकी विस्तृत व्याख्या आगे के पाठ में की जाएगी।

क्वेरी चलाना (execute)

<?php
$result = $query->execute();
foreach ($result as $record) {
  // प्रत्येक $record के साथ कुछ करें
}
?>

या एकल वैल्यू के लिए:

<?php
$title = $query->execute()->fetchField();
?>

COUNT क्वेरी

रिकॉर्ड्स की गिनती प्राप्त करने के लिए:

<?php
$num_rows = $query->countQuery()->execute()->fetchField();
?>

Debugging (डिबगिंग)

क्वेरी स्ट्रिंग को प्रिंट करने के लिए:

<?php
print_r($query->__toString());
?>