複雑なクエリ

Zend Frameworkのすべてのファンの皆さん、こんにちは。 Zend_Db_Selectクラスを知って、愛し、使用して、SQLクエリを作成すると思います。 間違いなく、このアプローチには多くの利点があります。 データベースで最も単純なクエリを簡単に作成するには、 ドキュメントを調べるだけで十分です。 しかし、要求されたクエリが非常に単純ではない場合はどうでしょうか?

このような問題を解決するために、Habréにすでに投稿がありました 。 しかし、最近、次のクエリを作成するタスクに直面しました。
SELECT * FROM `table` WHERE `sex`= "male" AND (`age` > 18 OR `hobby` = "sport"); 

複雑なことは何もないように思えますが、最初に頭に浮かぶのは、 orWhereメソッドの使用です。
 $this->select() ->where( "sex = ?", "male" ) ->where( "age > ?", 18, "INTEGER" ) ->orWhere( "hobby = ?", "sport" ); 

ただし、これにより、次のSQLコードが生成されます。
 SELECT `table`.* FROM `table` WHERE (`table`.`sex`= "male") AND (`table`.`age` > 18) OR (`table`.`hobby` = "sport"); 

これは、データベースに送信する予定のリクエストではありません。 どうする? 私はこのような解決策を提案します:
 $select = $this->select(); $condition = $select->orWhere( "age > ?", 18, "INTEGER" ) ->orWhere( "hobby = ?", "sport" ) ->getPart( Zend_Db_Select::WHERE ); $condition = is_array( $condition ) ? implode( " ", $condition ) : $condition; $select->reset( Zend_Db_Select::WHERE ); $select->where( "sex = ?", "male" ) ->where( $condition ); 

その結果、絶対に正しいリクエストがあります。 みんなに良いコーディング;)


Source: https://habr.com/ru/post/J111918/


All Articles