ホームページ  >  記事  >  バックエンド開発  >  Yii クエリの IN クエリは 1 つのメソッドのみをクエリできます

Yii クエリの IN クエリは 1 つのメソッドのみをクエリできます

巴扎黑
巴扎黑オリジナル
2017-08-13 14:32:582714ブラウズ

この記事では、Yii フレームワークのパラメータ化クエリで IN クエリが 1 つしかクエリできない問題の解決策を主に紹介し、Yii フレームワークで IN クエリが 1 つだけクエリできる理由を例と関連関数の形式で分析します。 FIND_IN_SET 関数の使用スキルと必須の友人はそれを参照してください

この記事の例では、Yii フレームワークのパラメータ化されたクエリで 1 つの IN クエリしかクエリできない問題の解決策について説明します。参考のために皆さんと共有してください。詳細は次のとおりです:

yiiフレームワークでINクエリのパラメータ化を使用すると、結果が期待どおりになりません


$sql =<<<SQL
SELECT id FROM tb WHERE id IN(:ids)
SQL;
$db = GeneralService::getSlaveDB();
$result = $db->createCommand($sql)->query([&#39;:ids&#39; => &#39;1013,1015,1017&#39;])->readAll();
print_r($result);


Array
(
  [0] => Array
    (
      [id] => 1013
    )
)

そこで、関連するソースコードを確認しましたyii フレームワークでそれが PDO クエリであることがわかったので、PDO 関連情報をクエリしてその理由を見つけました: 一連の値をプレースホルダーに置き換えることはできません


SELECT id FROM tb WHERE userid IN ( ? );

理由が分かったので、次は、単純な一般科学に基づいてニーズを満たすことができる FIND_IN_SET 関数を見つけます


$sql =<<<SQL
SELECT id FROM tb WHERE FIND_IN_SET(id, :ids)
SQL;
$db = GeneralService::getSlaveDB();
$result = $db->createCommand($sql)->query([&#39;:ids&#39; => &#39;1013,1015,1017&#39;])->readAll();
print_r($result);

。文字列str は N にあります。 サブチェーンで構成される文字列リスト strlist では、戻り値の範囲は 1 から N です。

文字列リストは、「,」記号で区切られたサブチェーンで構成される文字列です。最初の引数が定数文字列で、2 番目の引数が SET 型の列である場合、FIND_IN_SET() 関数はビット計算を使用するように最適化されます。

str が strlist にない場合、または strlist が空の文字列の場合、戻り値は 0 です。いずれかのパラメータが NULL の場合、戻り値は NULL になります。最初の引数にカンマ (',') が含まれている場合、この関数は正しく動作しません。


[追記] strlist内のカンマからなる文字列は通常通り使用できず、カンマの右側にスペースが入ると認識されません。

以上がYii クエリの IN クエリは 1 つのメソッドのみをクエリできますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。