sql >> データベース >  >> RDS >> Mysql

PHPクエリビルダーを使用した複雑なWHERE句の処理

    私はZend_Dbにかなり取り組みました PHP SQLクエリを作成するためのクラス を含むライブラリ 。 WHEREで考えられるすべてのSQL構文を処理しようと試みることにしました。 およびHAVING いくつかの理由による条項:

    • PHPは、リクエストごとにコードを解析およびコンパイルするスクリプト言語です(バイトコードキャッシュを使用しない場合)。そのため、PHP環境は、かさばるコードライブラリに敏感です。Java、C#、Python、またはあなたが持っているものよりも敏感です。したがって、ライブラリをできるだけスリムに保つことが最優先事項です。

      すべてのZend_Db 私が取り組んだライブラリは、約2,000行のPHPコードでした。対照的に、JavaHibernateは約118K行のコードです。ただし、Javaライブラリはプリコンパイルされており、リクエストごとにロードする必要がないため、これはそれほど問題にはなりません。

    • SQL式は、あなたが示したPHPベースの構造のどれよりもコンパクトで、読みやすく、維持しやすい生成文法に従います。 SQL式の文法を学ぶことは、それをシミュレートできるAPIを学ぶことよりもはるかに簡単です。最終的には「簡略化された文法」をサポートすることになります。または、そのように始めて、ユーザーコミュニティから FeatureCreep に強制されていることに気づきます。 APIが使用できないほど複雑になるまで。

    • このようなAPIを使用するアプリケーションをデバッグするには、必然的に最終的なSQL式にアクセスする必要があるため、最もリークの多い抽象化 あなたが持つことができます。

    • SQL式にPHPベースのインターフェースを使用することの唯一の利点は、スマートエディターとIDEのコード完了を支援することです。しかし、非常に多くの演算子とオペランドが'>='のような文字列定数を使用する場合 、コード完了インテリジェンスを台無しにします。

    更新: 良いブログ記事「ORMへの別れ 」を読みました。 。"ライターのAldoCortesiは、SQL式言語 の使用を提案しています。 PythonのSQLAlchemyで。 Pythonでは標準である(ただしPHPではサポートされていない)構文糖衣構文と演算子のオーバーロードにより、これは非常に効果的なクエリ生成ソリューションになります。

    PerlのDBIx::Classも見るかもしれませんが、結局はかなり醜いものになります。



    1. ダイアログボックスを使用せずに、C#プロジェクトでMySQLデータベースの接続文字列を設定するにはどうすればよいですか?

    2. MySQLで、月の週を返す方法は?

    3. クエリ中にMySQLサーバーへの接続が失われました

    4. SQLで部分文字列検索を実装するための最良の方法は何ですか?