2012-10-08 23 views
8

Khi bạn có một trường dài trong truy vấn SQL, làm thế nào để bạn làm cho nó dễ đọc hơn?Làm cách nào để truy vấn SQL dễ đọc hơn trong PHP?

Ví dụ:

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

bạn có thể cụ thể hơn ở đây không? – AnandPhadke

+0

bạn có một số đề xuất vững chắc ở đây - tại sao không chọn một đề xuất làm câu trả lời được chấp nhận? –

+0

Chắc chắn sau 6 tháng, câu trả lời được bảo đảm. Chọn một trong các đề xuất dưới đây. – philwinkle

Trả lời

9

Bạn có thể ghép nó như thế này để làm cho nó dễ đọc hơn:

$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"; 

Note: Hãy chắc chắn trong khi concatinating truy vấn của bạn, đừng quên để lại dấu cách trước khi bạn bắt đầu một dòng mới giữa dấu ngoặc kép của bạn, nếu không bạn sẽ nhận được lỗi truy vấn không hợp lệ

+0

SQL ghép nối có thể dẫn đến các dấu chấm phẩy bị thất lạc trong PHP. Nó trông xấu xí với tôi - tôi thích 'sprintf' hơn thế này. – philwinkle

+2

Trong PHP, bạn có thể nối với không gian trắng trên nhiều dòng. Vì vậy, mở một dấu ngoặc kép trên một dòng và kết thúc nó trong một dòng khác. Không cần phải viết $ sql. = Nhiều lần. Bằng cách này, nó trông sạch sẽ. –

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

tôi sử dụng một công cụ miễn phí @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

tôi thích cú pháp Heredoc, mặc dù Nowdoc cũng sẽ làm việc ví dụ của bạn:

Heredoc:

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

Lợi thế của cả hai là y Bạn có thể sao chép và dán SQL thẳng vào và từ khối này mà không cần phải thoát hoặc định dạng nó. Nếu bạn cần bao gồm phân tích cú pháp, chẳng hạn như bạn sẽ làm với các biến từ chuỗi được trích dẫn kép, bạn sẽ sử dụng Heredoc. Nowdoc hoạt động giống như dấu nháy đơn.

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'); 
} 

Heredoc:

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

Và, FWIW, Sublime Text 2 nhận ra cú pháp này là SQL thay vì một chuỗi PHP và chuyển cú pháp làm nổi bật một cách thông minh. Khá đẹp. – philwinkle

+0

bình chọn của tôi là cho cái này - theo một số cách, đây chính xác là cú pháp heredoc/nowdoc được tạo ra, và cho trình soạn thảo mã của bạn một gợi ý về cách áp dụng tô sáng cú pháp là một phần thưởng tốt đẹp. –

+0

Lưu ý rằng các ví dụ của bạn sẽ không hoạt động: trình nhận dạng đóng (SQL) không thể có bất kỳ thụt đầu dòng nào ở phía trước nó. – 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

Đây chỉ là một cách khác.

Lưu ý rằng việc nối mảng nhanh hơn chuỗi nối.

$sql = join(" \n", Array(
    'SELECT ', 
    ' [...fields...]', 
    ' [...more fields...]', 
    'FROM table', 
    'JOIN table2 AS TNS ON TNS.id = table.id', 
    'WHERE something = 1', 
)); 
Các vấn đề liên quan