2016-04-19 7 views
1

をデフォルトに、私はこれは私が何かを試してみたMySQLのバインド変数はどれも

const QUERY = "SELECT * FROM Project LIMIT :limit OFFSET :offset"; 

ノーリミットをデフォルトにバインドされたいですlike

$values = [ 
     ':limit' => $this->limit ? $this->limit : null, 
     ':offset' => $this->offset 
    ]; 

しかし、制限フラグを無視するためのキーワードがSQLに含まれているかどうかは疑問でした。私。 LIMIT ALL - それが合理的な場合。

+0

これはSQLを使用して解決するべきではありません。アプリケーション層ではなく、db層で問題です。 2つのクエリを使用できます(LIMITの場合は1つ、LIMITの場合は1つ)。私はまだ良い方法で問題を解決するORMを使用することをお勧めします – Mazzy

+0

@ RiggsFollyそこからLIMITとOFFSET句が必要なのは、Projectから*を選択すると約20,000の結果が返されるからです。 –

+0

[MySQL LIMITとOFFSETクエリを使用してすべてのレコードを選択]の可能な複製(http://stackoverflow.com/questions/15950871/select-all-records-using-mysql-limit-and-offset-query) – mitkosoft

答えて

2

あなたの考えを回してください。

$values = [ 
    ':limit' => $this->limit, 
    ':offset' => $this->offset 
]; 

const QUERY = "SELECT * FROM Project"; 
const LIMIT = " LIMIT :limit OFFSET :offset"; 

$query = QUERY; 

if (isset($values[':limit'])) { 
    $query .= LIMIT; 
} 

// now do parameter substitution, 
// testing again if you need to add the limit params 
+0

それは実際にはたくさんの意味があります、私はそれを行こうと思います! –

0

PHPコード内でこれを解決するのが最善の方法です。制限を使用しない場合はキーワードLIMITを使用しないでください。キーワードLIMITを実際に使用していて、すべての行を表示するように指定している場合、mysqlドキュメントの状態は次のようになります。

特定のオフセットからすべての行を結果セットの最後まで検索するには、第2パラメータの番号。この文は、最後に第96行からすべての行を取得します。

SELECT * FROM tbl LIMIT 95,18446744073709551615; 

だから、解決策は本当に大きな数(BIGINTの最大値)を使用することです。はい、私は知っている.. MySQLはひどいです。

+0

ああ、ありがとうとにかく - 私はむしろその定数を使用するよりもいくつかのビジネスロジックを追加したいと思います:D –

+0

良い:)それはビジネスロジックでそれを解決するために実際にはより良い – Laurens

+0

この回答は、[この1つのように奇妙に見える(http://stackoverflow.com/a/15950977/2310830)いたずらないたずら – RiggsFolly

関連する問題