Я знаю, что 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'
, а не "HAVING (as.seed_name = 'johnny')" "
Вернемся немного назад, у нас есть таблицы:
fruit_db.apples
| id | name |
--------------
| 1 | red |
| 2 | green|
fruit_db.apple_seeds
| apple_id | seed_name |
------------------------
| 1 | johnny |
| 1 | judy |
| 2 | granny |
Я хочу получить следующие результаты:
| id | name | apple_id | seed_name |
-------------------------------------
| 1 | red | 1 | johnny |
| 1 | red | 1 | judy |
Приведенный выше запрос дает этот результат, но использование Zend_Db_Select ставит круглые скобки вокруг каждой части операторов where и where, которые делают недействительным мой запрос.Так
$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"');
производит:
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.Вкратце:
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, является недопустимым SQL.Мне не нужна только одна строка, в которой было указано имя_видения «Джонни», я хочу, чтобы ВСЕ строки были где идентификатор яблока = 1, а «имя_семена» «Джонни» где-то в этих результатах.Могу ли я получить то, что мне нужно, через Zend_Db_Select или мне нужно пройти по маршруту raw query ()?
Редактировать: я немного пересмотрел вопрос, чтобы быть ближе к тому, что я хочу, и попытался уточнить егонемного.