私は、Zendが持つ()メソッドを提供して知っているが、私が欲しいのは、クエリのようなものです:ビットをバックトラッキングかっこなしでZend_Db_Selectステートメントで "HAVING"節を使用するにはどうすればよいですか?
SELECT a.*, `as`.* FROM `fruit_db`.`apples` AS `a`
INNER JOIN `fruit_db`.`apple_seeds` AS `as` ON a.id = as.apple_id
WHERE (a.id = 1) AND as.seed_name HAVING 'johnny'
ない "HAVING(as.seed_name = 'ジョニー')"
、我々
fruit_db.apples
| id | name |
--------------
| 1 | red |
| 2 | green|
fruit_db.apple_seeds
:テーブルを持っています| id | name | apple_id | seed_name |
-------------------------------------
| 1 | red | 1 | johnny |
| 1 | red | 1 | judy |
提供上記のクエリこの結果を与えるが、使用してZend_Db_Selectは私のクエリを無効にしたとステートメントの各部分の周りに括弧を置く:
| apple_id | seed_name |
------------------------
| 1 | johnny |
| 1 | judy |
| 2 | granny |
10は、私のような結果が欲しいです。だから、
$zend_db_table->select()
->setIntegrityCheck(false)
->from(array("a" => "apples"), array("*"))
->join(array("as"=>"apple_seeds"),
"a.id = as.apple_id",
array("*"))
->where('a.id = 1')
->where('as.seed_name HAVING "johnny"');
は生成:無効なSQLです
SELECT a.*, `as`.* FROM `fruit_db`.`apples` AS `a`
INNER JOIN `fruit_db`.`apple_seeds` AS `as` ON a.id = as.apple_id
WHERE (a.id = 1) AND (as.seed_name HAVING 'johnny')
を。要するに:
SELECT a.*, `as`.* FROM `fruit_db`.`apples` AS `a`
INNER JOIN `fruit_db`.`apple_seeds` AS `as` ON a.id = as.apple_id
WHERE (a.id = 1) AND as.seed_name HAVING 'johnny'
有効ですが、:Zendのは生産
SELECT a.*, `as`.* FROM `fruit_db`.`apples` AS `a`
INNER JOIN `fruit_db`.`apple_seeds` AS `as` ON a.id = as.apple_id
WHERE (a.id = 1) AND (as.seed_name HAVING 'johnny')
は無効なSQLです。私はapple_name = 1とseed_name 'johnny'がどこかの結果にあるすべての行を必要としています。私はZend_Db_Selectを介して必要なものを手に入れることができますか、生のquery()ルートを使う必要がありますか?
編集:質問を少し修正して、私が望むものに近づき、少し明確にしようとしました。
私は、Zendについては何も知らないが、私は持つことはWHERE句の一部ではないことを知っています。だから、間違った方法でクエリを作成していると思います。 HAVINGはGROUP BYの一部です... ZendのGROUP BYドキュメントを見ると、あなたの答えが見つかります。私はHAVINGがGROUP BYなしでも有効であるかどうかわかりませんが、多分それはMySQLでいくつかの魔法のGROUP BYを暗示しています。私はまた、HAVING 1が有効なHAVING節ではないと思いますが、もう一度...多分魔法のMySQLnessでしょう。 – Flimzy
私はFlimzyに同意します。あなたはクエリーが間違っています。 Zendでは ' - > having()'メソッドを使うことができますが、あなたのクエリは無効です。 – Peter
あなたはおそらくFlimzyです。私は、あなたが "as.seed_name HAVING 'johnny'"を使って私の最初のクエリを保証することができるので、私がそれを望んでいる間、長い間欲しいと思っているので、私はいくつかの魔法のGROUP BYまたは何か他のものを暗示しているように、それの周りに括弧がない、私はちょうどそのようにそれを生産するZendを得ることができません。 Zend's - >()は残念ながら、私が探している結果セットを提供していません。私は、MySQLのドキュメントを掘り下げて、今のところ単純なold - > query()を使っています。ありがとう! – thecheese