Zend_Db_Select операторындағы «HAVING» тармағын жақшасыз қалай пайдалануға болады?

Мен 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 функциясы барлық бөліктердің айналасындағы жақшаны және сұрауды жарамайтын мәлімдемелерді орналастырады. Мәселен

$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 жарамсыз. Мен тек «johnny» көрген бір жолды қаламаймын, алма id = 1 және seed_name 'johnny' бұл нәтижелерде бір жерде болған барлық жолдарды қалаймын. Мен Zend_Db_Select арқылы қажетті нәрсені ала аламын ба? Немесе raw query() маршрутына баруым керек пе?

Өңдеу: Мен сұрақты бір сәтте өзім қалаған нәрсеге жақындатып, оны аздап түсіндіруге тырыстым.

3
Мен Zend туралы ештеңе білмеймін, бірақ HAVING WHERE тармағының бөлігі емес екенін білемін. Сондықтан сұрауыңызды дұрыс емес әдіс қолданып жатқаныңызға сенімдімін. HAVING GROUP BY-ның бөлігі болып табылады ... сондықтан Zend's GROUP BY құжаттамасына қарасаңыз, жауапыңызды таба аласыз. Мен білмеймін, егер HAVING группой жоқ болса да жарамды, бірақ мүмкін, бұл дегеніміз, кейбір сиқырлы группу MySQL. Сондай-ақ, «HAVING 1» - жарамды HAVING тармағы деп ойламаймын, бірақ қайтадан ... сиқырлы MySQLness.
қосылды автор Flimzy, көзі
Мен Флимзимен келісемін. Сұрауыңыз дұрыс емес. Zend-те -> having() әдісін қолдануға болады, бірақ сіздің сұрауыңыз жарамсыз.
қосылды автор Peter, көзі
Сіз, мүмкін, дұрыс Flimzy. Мен HAVING-ді кейбір сиқырлы ТОБЫ немесе тағы бір нәрсені білдіретін жолмен дұрыс пайдаланбауыма келісемін, себебі мен сіздердің алғашқы сұрауыңызды «as.seed_name HAVING» johnny «арқылы қолданамын деп сендіре аламын айналасында жақшалар жоқ, мен оны дәл осылай шығара алмаймын. Zend's -> having() өкінішке орай, іздейтін нәтиже жиынтығын бермейді. Менің ойымша, MySQL құжаттамасын қазып, қарапайым ескі -> query() функциясын қолданамын деп ойлаймын. Рахмет!
қосылды автор thecheese, көзі

1 жауаптар

өзгерту

->where('as.apple_id HAVING 1');

дейін

->having('as.apple_id = 1');

http://framework.zend.com/manual/en/zend.db .select.html

1
қосылды
содан кейін -> where ('a.id = 1') қалдырыңыз және орнына -> where ('as.seed_name HAVING' johnny '') (- as.seed_name = «johnny») болғанда, ол өнімнің sql , мұнда a.id = 1 ретінде as.seed_name = 'johnny'
қосылды автор nisav, көзі
Егер мен оны қайтадан өңделген сұраққа/сұрауыма қолданатын болсақ, ол: a. *, ретінде . fruit_db . apples AS ҚОСЫЛҒАН fruit_db apple_seeds HOWING as.seed_name = 'johnny' Мәселе мынада, seed_name «johnny» тең болатын бір ғана жолды қайтарады. Мен apple_id-дің 1-дің барлық жолдарын іздеймін, бірақ сол жолдардың кез-келгенінде «johnny» дің seed_name болса,
қосылды автор thecheese, көзі