我知道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
| 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對象放在括號中有和,語句該無效我查詢的每一部分的周圍。所以
$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。我不希望只有一行有seen_name'johnny',我希望所有行的apple id = 1 AND seed_name'johnny'在這些結果中的某處。我可以通過Zend_Db_Select獲取我需要的東西,還是需要轉到原始查詢()路由?
編輯:我已經修改了這個問題一點點,以接近我想要的,並試圖澄清一點。
我不知道Zend的東西,但我確實知道,HAVING不是WHERE子句的一部分。所以我很確定你使用錯誤的方法來建立你的查詢。 HAVING是GROUP BY的一部分......所以,如果你看看Zend的GROUP BY文檔,你會發現你的答案。我不知道沒有GROUP BY的情況下HAVING是否是有效的,但也許它暗示了MySQL中的一些神奇的GROUP BY。我也不認爲'HAVING 1'是一個有效的HAVING子句,但是也可能是......也許是神奇的MySQLness。 – Flimzy
我同意Flimzy。你的查詢是錯誤的。你可以在Zend中使用' - > having()'方法,但你的查詢仍然無效。 – Peter
你可能是對的。我同意我可能濫用HAVING的方式可能暗含着一些神奇的GROUP BY或別的東西,因爲我可以向你保證我的第一個查詢使用「as.seed_name HAVING'johnny'」,只要我希望它能夠工作,周圍沒有括號,我只是無法讓Zend以這種方式製作它。 Zend's - > having()不幸的是沒有給出我正在尋找的結果集。我想我會繼續深入挖掘MySQL文檔,並且現在只使用普通的old - > query()。謝謝! – thecheese