2012-10-08 69 views
8

當你在SQL查詢中有很長的字段時,你如何使它更具可讀性?如何使SQL查詢在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

兩者的優點是y您可以直接複製和粘貼直接來自此塊的SQL,而不必轉義或格式化它。如果你需要包含解析,比如你使用雙引號字符串的變量,你可以使用Heredoc。 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

而且,FWIW,Sublime Text 2將此語法識別爲SQL而不是PHP字符串,並智能地切換語法突出顯示。很不錯。 – philwinkle

+0

我的投票是針對這一個的 - 在某些方面,這正是heredoc/nowdoc語法的目的,並且給你的代碼編輯器提供瞭如何應用語法高亮的提示,這是一個不錯的獎勵。 –

+0

請注意,您的示例不起作用:結束標識符(SQL)不能在其前面有任何縮進。 – 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

這只是另一種方式。

請注意,數組連接比字符串連接更快。

$sql = join(" \n", Array(
    'SELECT ', 
    ' [...fields...]', 
    ' [...more fields...]', 
    'FROM table', 
    'JOIN table2 AS TNS ON TNS.id = table.id', 
    'WHERE something = 1', 
)); 
相關問題