2012-10-08 15 views
8

जब आपके पास SQL ​​क्वेरी में लंबे फ़ील्ड हैं, तो आप इसे और अधिक पठनीय कैसे बनाते हैं?PHP क्वेरी को PHP में और अधिक पठनीय कैसे बनाएं?

उदाहरण के लिए:

public function findSomethingByFieldNameId($Id) { 
     $sql = "SELECT field1, field2, field3 as Field3_Something, field4, field5, field6, field7, field8, field9 
         FROM table 
       JOIN table2 AS TNS ON TNS.id = table.id 
         WHERE something = 1"; 
return $this->db->fetchData($sql, null, 'all'); 
    } 
+0

क्या आप यहां अधिक विशिष्ट हो सकते हैं? – AnandPhadke

+0

आपके यहां कुछ ठोस सुझाव हैं - क्यों स्वीकार किए गए उत्तर के रूप में नहीं चुनें? –

+0

निश्चित रूप से 6 महीने के बाद एक जवाब जरूरी है। नीचे दिए गए सुझावों में से एक का चयन करें। – philwinkle

उत्तर

9

आप इस तरह यह जोड़ सकते हैं इसे और अधिक पठनीय बनाने के लिए:

$sql = "SELECT field1, field2, field3 as Field3_Something,"; 
$sql.= " field4, field5, field6, field7, field8, field9"; 
$sql.= " FROM table JOIN table2 AS TNS ON TNS.id = table.id"; 
$sql.= " WHERE something = 1"; 

नोट: जबकि आपकी क्वेरी concatinating सुनिश्चित करें, भूल नहीं है छोड़ने के लिए आपके डबल कोट्स के बीच एक नई लाइन शुरू करने से पहले रिक्त स्थान, अन्यथा आपको क्वेरी अमान्य त्रुटि मिलेगी

+0

SQL को संगत करने से PHP में गलत स्थानांतरित अर्धविराम हो सकता है। यह मेरे लिए बदसूरत लग रहा है - मैं इस पर 'sprintf' पसंद करेंगे। – philwinkle

+2

PHP में, आप कई पंक्तियों पर सफेद-स्थान के साथ संयोजित कर सकते हैं। तो, एक पंक्ति पर एक डबल कोट खोलें और इसे दूसरी पंक्ति में समाप्त करें। $ Sql ​​लिखने की कोई ज़रूरत नहीं है। = कई बार। इस तरह, यह साफ दिखता है। –

0
$sql = "SELECT field1, 
       field2, 
       field3 as Field3_Something, 
       field4,.... 
     FROM table 
     JOIN table2 AS TNS ON TNS.id = table.id 
     WHERE something = 1"; 
3

मैं @http://www.sqlinform.com

<?php 
public function findSomethingByFieldNameId($Id) { 
    $sql = "SELECT field1     , 
        field2     , 
        field3 AS Field3_Something, 
        field4     , 
        field5     , 
        field6     , 
        field7     , 
        field8     , 
        field9 
      FROM TABLE 
        JOIN table2 AS TNS 
        ON TNS.id = table.id 
      WHERE something = 1"; 

    return $this->db->fetchData($sql, null, 'all'); 
} 
?> 
13

मैं हियरडॉक वाक्य-विन्यास पसंद करते हैं एक नि: शुल्क उपकरण का उपयोग, हालांकि Nowdoc भी अपने उदाहरण के लिए काम करेगा:

हियरडॉक:

http://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc

Nowdoc: http://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.nowdoc

दोनों के साथ लाभ वाई है कहां से बचने या प्रारूपित किए बिना इस ब्लॉक से सीधे और सीधे एसक्यूएल पेस्ट कर सकते हैं। यदि आपको पार्सिंग शामिल करने की आवश्यकता है, जैसे कि आप डबल-उद्धृत स्ट्रिंग से चर के साथ करेंगे, तो आप हेरेडोक का उपयोग करेंगे। Nowdoc एकल उद्धरण की तरह व्यवहार करता है।

Nowdoc:

public function findSomethingByFieldNameId($Id) { 
    $sql = <<<'SQL' 
    SELECT field1, field2, field3 as Field3_Something, field4, field5, field6, field7, field8, field9 
    FROM table 
    JOIN table2 AS TNS ON TNS.id = table.id 
    WHERE something = 1 
SQL; 

    return $this->db->fetchData($sql, null, 'all'); 
} 

हियरडॉक:

public function findSomethingByFieldNameId($Id) { 
    $sql = <<<SQL 
    SELECT field1, field2, field3 as Field3_Something, field4, field5, field6, field7, field8, field9 
    FROM table 
    JOIN table2 AS TNS ON TNS.id = table.id 
    WHERE something = '$Id' 
SQL; 

    $sql = mysql_real_escape_string($sql); 

    return $this->db->fetchData($sql, null, 'all'); 
} 
+3

और, एफडब्ल्यूआईडब्लू, सब्लिमे टेक्स्ट 2 इस वाक्यविन्यास को PHP स्ट्रिंग के बजाय एसक्यूएल के रूप में मान्यता देता है और समझदारी से हाइलाइटिंग सिंटैक्स को स्विच करता है। बहुत अच्छा। – philwinkle

+0

मेरा वोट इस के लिए है - कुछ मायनों में यह है कि हेड्रोक/नोडोक सिंटैक्स के लिए यह बिल्कुल सही है, और आपके कोड संपादक को सिंटैक्स हाइलाइटिंग को लागू करने के लिए एक क्यू देने का एक अच्छा बोनस है। –

+0

ध्यान दें कि आपके उदाहरण काम नहीं करेंगे: समापन पहचानकर्ता (एसक्यूएल) के सामने कोई इंडेंटेशन नहीं हो सकता है। – nullability

0
<?php 
    public function findSomethingByFieldNameId($Id) { 
     $sql = "SELECT 
        field1, 
        field2, 
        field3 as Field3_Something, 
        field4, 
        field5, 
        field6, 
        field7, 
        field8, 
        field9 
       FROM 
        table 
       JOIN table2 AS TNS 
        ON TNS.id = table.id 
       WHERE 
        something = 1"; 
     return $this->db->fetchData($sql, null, 'all'); 
} 
?> 
0

यह सिर्फ एक और तरीका है।

ध्यान दें कि सरणी शामिल स्ट्रिंग concatenation से तेज है।

$sql = join(" \n", Array(
    'SELECT ', 
    ' [...fields...]', 
    ' [...more fields...]', 
    'FROM table', 
    'JOIN table2 AS TNS ON TNS.id = table.id', 
    'WHERE something = 1', 
)); 
संबंधित मुद्दे