19

SQLクエリに長いフィールドがある場合、どのようにして読みやすくしますか?

例えば:

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

5 に答える 5

29

私はヒアドキュメント構文を好みますが、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

両方の利点は、エスケープしたりフォーマットしたりすることなく、このブロックとの間で直接SQLをコピーして貼り付けることができることです。二重引用符で囲まれた文字列の変数を使用する場合など、解析を含める必要がある場合は、ヒアドキュメントを使用します。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');
}
于 2012-10-08T14:04:49.593 に答える
11

このように連結して、読みやすくすることができます。

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

:クエリを連結するときは、二重引用符の間に新しい行を開始する前にスペースを残すことを忘れないでください。そうしないと、クエリの無効なエラーが発生します。

于 2012-10-08T14:03:08.863 に答える
1
 $sql = "SELECT field1,
                field2,
                field3 as Field3_Something,
                field4,....
         FROM table
         JOIN table2 AS TNS ON TNS.id = table.id
         WHERE something = 1";
于 2012-10-08T14:03:37.633 に答える
1

これは別の方法です。

配列結合は文字列連結よりも高速であることに注意してください。

$sql = join(" \n", Array(
    'SELECT ',
    '    [...fields...]',
    '    [...more fields...]',
    'FROM table',
    'JOIN table2 AS TNS ON TNS.id = table.id',
    'WHERE something = 1',
));
于 2016-12-16T16:53:48.743 に答える
-1
<?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');
}
?>
于 2012-11-29T13:03:46.027 に答える